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()
只在第一次计算值,还是有其他原因呢?
3 个回答
0
range(l) 这个东西只会被计算一次,真正被更新的是打印语句中 l 的值。
3
问题不在于range
这个东西评估它的参数有多频繁,而在于for item in sequence
这个循环评估sequence
有多频繁。答案是只评估一次。当你写for i in range(l)
的时候,range(l)
只会被评估一次,就这样。
5
不,for
循环只会计算一次可迭代的表达式。
range()
只会被调用 一次,然后 for
循环会遍历这个结果。
引用一下for
语句的文档:
这个表达式列表会被计算一次;它应该返回一个可迭代的对象。
强调是我自己的。