python中的range()每次都不评估它的参数

时间:2014-03-06 18:09:15

标签: python

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()仅首次评估值或其他原因是什么?

3 个答案:

答案 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值。