l
作为参数传递给range
函数,其值在for
循环内被修改,但循环将进行10
次而不是5
。
i = 0
l = 10
for i in range(l):
print i,l
global l
l = l-1
输出
0 10
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1
虽然我期待
0 10
1 9
2 8
3 7
4 6
range()
仅首次评估值或其他原因是什么?
答案 0 :(得分:4)
不,for
循环只评估一次可迭代表达式。
range()
被称为一次,然后for
循环遍历结果。
引用for
statement documentation:
表达式列表评估一次;它应该产生一个可迭代的对象。
强调我的。
答案 1 :(得分:3)
问题不在于range
评估其论点的频率,而是for item in sequence
评估sequence
的频率。答案是一次。当您编写for i in range(l)
时,range(l)
会被评估一次,就是这样。
答案 2 :(得分:0)
范围(l)被评估一次,正在更新的是print语句中的l值。