我对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
也不产生输出。。。。你知道吗
这和变量无关。 您使用的是一个枚举器对象,在第一个循环中它就结束了。 你必须为第二个循环重新创建它。你知道吗
这不是由于作用域,而是由于
enumerate
的性质,它创建了一个生成器,而不是一个列表。生成器是一次性的:它们按顺序弹出元素,不创建可以再次计算的列表。这样可以节省内存。你知道吗如果要在枚举的\u集上迭代两次,可以执行以下操作:
enumerated_set = list(enumerate(['tic','tac','toe']))
这实际上不是布尔值的问题。那总是
True
。你知道吗enumerated_set
是一个生成器。一旦你循环通过它,它就筋疲力尽了。你需要创建一个新的。你知道吗相关问题 更多 >
编程相关推荐