在Python中分配给for循环变量时令人困惑的行为

时间:2018-07-30 18:15:52

标签: python python-3.x python-2.7 loops for-loop

我很感兴趣为什么以下Python代码输出数字10..29(带有步骤1)。经过Python 2.7和3的测试。

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

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

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

2 个答案:

答案 0 :(得分:2)

实际上,每次执行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)

答案 1 :(得分:1)

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

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

请注意,i在循环的每次迭代中都从可迭代对象中重新分配了一个值。即使i的值已通过i += 10进行了更改,但在每次重复的开始都将其更改回循环计数器。

(注意:i = next(it)将在迭代器用尽后将引发异常。为避免混乱,我没有在此处添加异常处理,从技术上讲这是正确的。)