本文来自异想之旅公开发布的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 i in range
更多的时候,我们使用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 str
也是合法的:
for i in 'Hello':
print(i, end='-')
# 输出:H-e-l-l-o-
for 中的 else
与 上一章节 中提到的“while
中的else
”一样,如果for
循环正常退出,则会执行else
中的语句;如果for
循环是被break
结束,则不会执行。