for/if循环和python中变量的范围

not*_*tar 2 python scope

我对python中变量的范围感到困惑.这是我想要做的一个玩具示例:

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

我得到的结果是:

tic
tac
toe
Run Code Online (Sandbox Code Playgroud)

现在,

print a

回报

`True`
Run Code Online (Sandbox Code Playgroud)

如果我又跑了

for i,j in enumerated_set:
    if a == True:
        print j
Run Code Online (Sandbox Code Playgroud)

我没有输出.

我很困惑......从全局开始a = True,为什么在第二个循环中没有执行打印.

我感谢您的帮助.

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

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

也没有输出....

jdi*_*jdi 7

它实际上不是你的布尔值的问题.这总是如此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: 
Run Code Online (Sandbox Code Playgroud)

  • @DonQuestion,显然现在你必须等待10分钟的发布时间才能接受答案.jdi,谢谢你拯救我的理智! (2认同)