range()不会每次都计算它的参数吗?

3 投票
3 回答
648 浏览
提问于 2025-04-17 21:10

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 语句的文档

这个表达式列表会被计算一次;它应该返回一个可迭代的对象。

强调是我自己的。

撰写回答