我在另一个函数 foo()
中嵌套了一个函数定义 bar()
。现在我试图从嵌套函数 bar()
访问位于外部函数 foo()
中的变量。然而,由于范围规则,这不起作用(请参阅下面的错误回溯)。
我正在寻找类似于 global
关键字的东西,但是它只能让我访问global 变量,而这是某种半全局变量 变量。
示例代码:
def foo():
i = 0
def bar():
# how can I get access to the variable from enclosing scope?
i += 1
bar()
foo()
输出是:
$ python test.py
Traceback (most recent call last):
File "test.py", line 7, in <module>
foo()
File "test.py", line 5, in foo
bar()
File "test.py", line 4, in bar
i += 1
UnboundLocalError: local variable 'i' referenced before assignment
最佳答案
您需要 nonlocal
语句而不是 global
。
i
显然不是全局的,但它也不是 foo
的局部变量。它位于 __init__
的本地。因此,为了访问它,将其声明为 nonlocal
。
不幸的是,nonlocal
仅适用于 python3。
您可以通过闭包来模拟它,但这会变得非常难看。
https://stackoverflow.com/questions/10193754/