【发布时间】:2019-06-06 07:00:51
【问题描述】:
为什么会这样:
for i in range(10):
i += 1
print(i)
返回:
1
2
3
4
5
6
7
8
9
10
代替:
2
4
6
8
10
?
如果需要,这里会提供一些细节。
【问题讨论】:
为什么会这样:
for i in range(10):
i += 1
print(i)
返回:
1
2
3
4
5
6
7
8
9
10
代替:
2
4
6
8
10
?
如果需要,这里会提供一些细节。
【问题讨论】:
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
iter(range(10)) 产生的 iterator 将产生值 0、1、2...8 和 9 每次调用 next 时都会使用它,然后引发 @987654331 @11 号来电。
因此,您可以看到 i 在每次迭代中都被 range(10) 中的新值覆盖,而不是像在例如C 风格 for 循环。
【讨论】:
你应该在你的范围内使用步骤:
for i in range(2,11,2):
print(i)
输出:
2
4
6
8
10
【讨论】:
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
【讨论】: