我的main()函数是:
def main():
...
def _help():
...
1 a += somelist
2 a.append(something)
a=[]
_help()
奇怪的是第2行完全正常,但第1行会引发UnboundLocalError: Local variable 'a' referenced before assignment.
即使我将a
声明为main
或_help
顶部的全局变量,它仍然无法正常工作。这是为什么?
这两行都在编辑同一个变量,这让我想到它们两者都应该起作用。如何让第1行工作?
答案 0 :(得分:2)
每当你在Python中使用<variable> = <something>
时,Python都会自动认为它是一个局部变量,除非另有特别说明。
例如:
a = 1
def f():
if False:
a = 0
print(a) # UnboundLocalError
f()
在这种情况下,+=
也可用作作业,但.append
不会分配给a
,而是调用方法。
通过在您的函数中放置nonlocal a
来解决此问题,因此它可以分配到其范围之外的a
:
def main():
...
def _help():
nonlocal a
a += somelist # Works!
但在这种情况下,你可以a.extend(somelist)
。