我很好奇为什么下面的Python代码输出数字10..29 (步骤1)。使用Python 2.7和3进行了测试。
for i in range(20):
i += 10
print(i)
所以i += 10
会被执行,但尽管它在循环中,它也只执行一次。这是一个非常令人困惑的行为。
为什么Python的行为如此令人困惑?
发布于 2018-07-31 02:19:12
实际上,每次都会执行i += 10
,但不会影响循环开始时i
的值。
for i in range(20):
# generator range(20) assigns numbers from 0 to 19 to i
i += 10
# i is now 10 to 29; generator not affected
print(i)
发布于 2018-07-31 03:07:03
要理解这是如何工作的,一种方法是将for循环编写为等效的while循环:
it = iter(range(20))
while(True):
i = next(it)
i += 10
print(i)
请注意,在循环的每一次迭代中,i
都会从可迭代中重新分配一个值。即使使用i += 10
更改了i
的值,在每次重复开始时,它也会更改回循环计数器。
(注意:在iterable耗尽后,i = next(it)
将抛出异常。为了避免混乱,我没有在这里添加异常处理,这在技术上是正确的。)
https://stackoverflow.com/questions/51600013
复制相似问题