为什么不能在for循环中操纵“ i”

时间:2019-06-06 07:00:51

标签: python for-loop

为什么这样做:

for i in range(10):
 i += 1
 print(i)

返回:

1
2
3
4
5
6
7
8
9
10

代替:

2
4
6
8
10

如果需要更多详细信息,请参见此处。

3 个答案:

答案 0 :(得分:9)

for i in range(10):
    i += 1
    print(i)

等同于

iterator = iter(range(10))
try:
    while True:
        i = next(iterator)
        i += 1
        print(i)
except StopIteration:
    pass

iterator产生的iter(range(10))将产生值012 ... 89每次调用next时,在第11次通话中加注StopIteration

因此,您可以看到i在每次迭代中都被range(10)中的新值覆盖,并且没有增加,例如C样式的for循环。

答案 1 :(得分:2)

您应该使用自己范围内的步骤:

for i in range(2,11,2):
    print(i)

输出:

2
4
6
8
10

答案 2 :(得分:2)

i在每次循环迭代时分配,覆盖对其值所做的任何更改。

for i in range(10):
    i += 1
    print(i)

等效于:

 i = 0 # first iiteration
 i += 1
 print(i)

 i = 1 # second iiteration
 i += 1
 print(i)

 i = 2 # third iiteration
 i += 1
 print(i)

 # etc up to i = 9