1

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()

输出是:

$ 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
4

2 回答 2

7

您需要该nonlocal语句而不是global.

i显然不是全局的,但也不是局部的foo。它是本地的__init__。因此,为了访问它,声明它nonlocal

不幸的是,nonlocalist python3 而已。您可以通过闭包来模拟它,但这会变得非常难看。

于 2012-04-17T15:06:06.650 回答
3

这是您的解决方法:

class Test(object):
    def __init__(self):
        i = [0]
        def foo():
            i[0] += 1
        foo()
        print i[0]

t = Test()

这将是nonlocal关键字的一个用例,而不是global但仅在 Python 3 中可用。

于 2012-04-17T15:07:47.353 回答