本文来自异想之旅公开发布的Python教程,原文地址:https://www.yuque.com/yxzl/python
(这一段理解不了直接跳不影响)
for 语句的格式:
for 循环变量 in 迭代变量:
循环体
for 会:
迭代器 = iter(迭代变量)循环变量 = next(迭代器)具体流程可以参考下图:

for i in [1, 2, 3]:
print(i)
print('END')
输出:
1
2
3
END
在本例中,i是一个普通的变量,可以使用任意合法且未使用的变量名,一般约定上使用i,j,k,l...;而for语句根据in后面跟随的列表的长度决定循环次数,并在每次循环中依次把列表中的每一个值赋值给i。当赋值结束,循环也就终止。
更多的时候,我们使用for循环只是为了严格的进行指定次数的循环,这时候相比先手动去建立一个列表,Python为我们提供了更简单的方式:
for i in range(3):
print(i)
输出:
0
1
2
可以看到,上面的这两行代码共循环执行了3次print语句,i的取值是0,1,2。
这里我们可以用list将range()的返回值进行一次转换,来观察其规律:
print(list(range(3))) # [0, 1, 2]
print(list(range(0, 3))) # [0, 1, 2]
print(list(range(3, 6))) # [3, 4, 5]
print(list(range(3, 6, 2))) # [3, 5]
print(list(range(7, 3, -1))) # [7, 6, 5, 4]
0,即range(x)等价于range(0, x),并按照下面的规则处理range生成的列表范围和切片所能取到的列表项的索引是相同的,具体请参考 1.7 章节的相关内容。当然了,对于上例中的任何一个式子,用在for中也是一样的结果,此处以range(3, 6, 2)做演示:
for i in range(3, 6, 2):
print(i)
# 输出:
# 3
# 5
与“简单的示例”类似的,作为和列表在某些特性上极为相似的类型,for i in str也是合法的:
for i in 'Hello':
print(i, end='-')
# 输出:H-e-l-l-o-
与 上一章节 中提到的“while中的else”一样,如果for循环正常退出,则会执行else中的语句;如果for循环是被break结束,则不会执行。