首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中为for循环变量赋值时的混乱行为

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

Stack Overflow用户
提问于 2018-07-31 02:15:52
回答 2查看 46关注 0票数 -2

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

代码语言:javascript
复制
for i in range(20):
    i += 10
    print(i)

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 02:19:12

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

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2018-07-31 03:07:03

要理解这是如何工作的,一种方法是将for循环编写为等效的while循环:

代码语言:javascript
复制
it = iter(range(20))
while(True):
    i = next(it)
    i += 10
    print(i)

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档