是否range()不会每次都评估其参数?


问题内容

l作为参数传递给range函数,该函数的值在for循环内部被修改,但循环执行的10时间是而不是5

i = 0
l = 10
for i in range(l):
    print i,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()为只在第一次评估值或别的东西,是什么原因?


问题答案:

不,for循环仅对可迭代表达式求值一次。

range()被调用 一次for然后循环遍历结果。

引用for声明文档中的内容

表达式列表被 评估一次 ; 它应该产生一个可迭代的对象。

强调我的。