在Python中分配给for循环变量时混淆行为

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (71)

我很感兴趣为什么以下Python代码输出数字10..29(步骤1)。使用Python 2.7和3进行测试。

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

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

为什么Python表现出这种令人困惑的方式?

提问于
用户回答回答于

实际上,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)
用户回答回答于

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

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

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

(注意:i = next(it)在iterable耗尽后会抛出一个异常。为了避免混乱,我没有在这里添加异常处理,这将使技术上正确。)

扫码关注云+社区

领取腾讯云代金券