在Python中为for循环变量赋值时的混乱行为



我很好奇为什么下面的Python代码输出数字10..29(步骤1(。使用Python 2.7和3进行了测试。

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

因此i += 10被执行,但尽管它在循环中,但只执行一次。这是一种非常令人困惑的行为。

为什么Python的行为如此令人困惑?

实际上,每次都会执行i += 10,但不会影响值在循环开始时CCD_ 3。

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)

理解其工作原理的一种方法是将for循环编写为等效的while循环:

it = iter(range(20))
while(True):
i = next(it)
i += 10
print(i)

请注意,在循环的每次迭代中,i都会从iterable中重新分配一个值。即使i的值随着i += 10而改变,它也在每次重复开始时变回循环计数器。

(注意:i = next(it)将在可迭代项用完后抛出异常。为了避免混乱,我没有在这里添加异常处理,这将使其在技术上正确。(

最新更新