我的 main() 函数是:
def main():
...
def _help():
...
1 a += somelist
2 a.append(something)
a=[]
_help()
奇怪的是,第 2 行 工作得很好,但第 1 行 抛出了一个 UnboundLocalError: 赋值前引用了局部变量 'a'。
即使我在 main
或 _help
顶部将 a
声明为全局变量,它仍然不起作用。这是为什么?
这两行都在编辑相同的变量,这让我认为它们要么都起作用,要么都不起作用。如何让第 1 行工作?
最佳答案
每当您使用<variable> = <something>
时在 Python 中,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)
.
关于python - 为什么我可以通过调用对象的方法来编辑对象,但不能在较小的范围内引用它们的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44598567/