someStuff = False
def spawn():
print(someStuff)
if( 3==4):
someStuff = True
while (someStuff==False):
spawn()
这里的代码,print(someStuff)不起作用,它说" UnboundLocalError:局部变量' someStuff'在转让之前引用"。但是,如果if语句被取出,那么它就可以了。
答案 0 :(得分:1)
函数中的赋值someStuff = True
告诉Python您将创建局部变量someStuff
。然后Python在分配和抱怨之前看到someStuff
中对print(someStuff)
的引用。您需要声明someStuff
为global
来解决这种歧义。使您的第一行功能为global someStuff
。请注意,这样做意味着后面的赋值将影响全局变量。
答案 1 :(得分:1)
如果你有这个:
def spawn():
print(someStuff)
python将假设someStuff
必须是全局变量。但是,如果您在函数中有作业:
def spawn():
print(someStuff)
if 3==4:
someStuff = True
然后python假定它是一个需要在使用之前分配的局部变量。
您可以通过在函数中添加global someStuff
让python知道它是全局的:
def spawn():
global someStuff
print(someStuff)
if 3==4:
someStuff = True
答案 2 :(得分:0)
这是一个奇怪的问题,全局变量在python中的工作方式。
此更改应该有效:
someStuff = False
def spawn():
print(someStuff)
if( 3==4):
global someStuff
someStuff = True
while (someStuff==False):
spawn()
有关为何会以这种方式发生这种情况的更多信息:请阅读this