for循环如何评估其参数

Roc*_*lly 4 python for-loop python-2.7 python-3.x

我的问题非常简单.

for循环是否评估它每次使用的参数?

如:

for i in range(300):
Run Code Online (Sandbox Code Playgroud)

python是否为此循环的每次迭代创建了300个项目的列表?

如果是,这是一种避免它的方法吗?

lst = range(300)
for i in lst:
    #loop body
Run Code Online (Sandbox Code Playgroud)

对于像这样的代码示例也是如此.

for i in reversed(lst):

for k in range(len(lst)):
Run Code Online (Sandbox Code Playgroud)

是每次都应用反向过程,还是每次迭代计算的长度?(我问这个python2和python3)

如果没有,Python如何在迭代迭代时评估迭代的变化?

Die*_*Epp 7

没有恐惧,迭代器只会被评估一次.它最终大致相当于这样的代码:

it = iter(range(300))
while True:
    try:
        i = next(it)
    except StopIteration:
        break
    ... body of loop ...
Run Code Online (Sandbox Code Playgroud)

请注意,它并不完全等效,因为它的break工作方式不同.请记住,你可以将添加else到一个for循环,但不会在上面的代码工作.