Does range() not evaluate its argument every time?

ⅰ亾dé卋堺 提交于 2019-12-01 07:24:25

问题


l is passed as an argument to range function whose value is modified inside for loop, but the loop is going for 10 times instead of 5.

i = 0
l = 10
for i in range(l):
    print i,l
    l = l-1

The output is

0 10
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1

While I expected

0 10
1 9
2 8
3 7
4 6

Does range() evaluates value for the first time only or something else is the reason?


回答1:


No, the for loop evaluates the iterable expression just once.

range() is called once, and the for loop then iterates over the result.

Quoting from the for statement documentation:

The expression list is evaluated once; it should yield an iterable object.

emphasis mine.




回答2:


The issue is not how often range evaluates its argument, but how often for item in sequence evaluates sequence. The answer is once. When you write for i in range(l), range(l) is evaluated once and that's it.




回答3:


range(l) is evaluated once, what is being updated is the value of l in the print statement.



来源:https://stackoverflow.com/questions/22232558/does-range-not-evaluate-its-argument-every-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!