从嵌套函数中的封闭范围访问变量

moo*_*eep 0 python closures scope

bar()在另一个函数中嵌套了一个函数定义foo().现在我试图foo()从嵌套函数访问位于外部函数中的变量bar().但是,由于范围规则,这不起作用(请参阅下面的错误追溯).

我正在寻找类似于global关键字的东西,但这只能让我访问全局变量,而这是某种半全局变量.

这是示例代码:

def foo():
    i = 0
    def bar():
        # how can I get access to the variable from enclosing scope?
        i += 1
    bar()

foo()
Run Code Online (Sandbox Code Playgroud)

输出是:

$ 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
Run Code Online (Sandbox Code Playgroud)

ch3*_*3ka 6

你需要nonlocal声明而不是global.

i显然不是全球性的,但它也不是本地的foo.这是当地的__init__.因此,为了访问它,声明它nonlocal.

不幸的是,nonlocal只有ist python3.你可以通过闭包来模拟它,但这会非常难看.