for/if循环和python中变量的作用域

2024-06-23 20:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python中变量的作用域感到困惑。下面是一个我尝试做的玩具例子:

a = True
enumerated_set = enumerate(['tic','tac','toe'])
for i,j in enumerated_set:
    if a == True:
        print j

我得到的结果是:

tic
tac
toe

现在

print a

退货

`True`

如果我再跑一次

for i,j in enumerated_set:
    if a == True:
        print j

我没有输出。你知道吗

我很困惑。。。既然全局a = True,为什么在第二个循环中没有执行打印。你知道吗

我感谢你的帮助。你知道吗

编辑:另一个让我困惑的例子

y = 'I like this weather'.split()
for item in y:
    for i,j in enumerated_set:
         if a == True: 
             print j

也不产生输出。。。。你知道吗


Tags: intrueforiftic全局作用域例子
3条回答

这和变量无关。 您使用的是一个枚举器对象,在第一个循环中它就结束了。 你必须为第二个循环重新创建它。你知道吗

这不是由于作用域,而是由于enumerate的性质,它创建了一个生成器,而不是一个列表。生成器是一次性的:它们按顺序弹出元素,不创建可以再次计算的列表。这样可以节省内存。你知道吗

如果要在枚举的\u集上迭代两次,可以执行以下操作:

enumerated_set = list(enumerate(['tic','tac','toe']))

这实际上不是布尔值的问题。那总是True。你知道吗

enumerated_set是一个生成器。一旦你循环通过它,它就筋疲力尽了。你需要创建一个新的。你知道吗

In [9]: enumerated_set = enumerate(['tic','tac','toe'])

In [10]: enumerated_set.next()
Out[10]: (0, 'tic')

In [11]: enumerated_set.next()
Out[11]: (1, 'tac')

In [12]: enumerated_set.next()
Out[12]: (2, 'toe')

In [13]: enumerated_set.next()
                                     -
StopIteration                             Traceback (most recent call last)
/usr/local/<ipython-input-13-7b0a413e4250> in <module>()
  > 1 enumerated_set.next()

StopIteration: 

相关问题 更多 >

    热门问题