我在另一个函数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
答案 0 :(得分:6)
您需要使用nonlocal
语句而不是global
。
i
显然不是全球性的,但它也不是foo
本地的。它位于__init__
的本地。因此,为了访问它,请声明它nonlocal
。
不幸的是,nonlocal
只是python3。
你可以通过闭包来模拟它,但这会非常难看。
答案 1 :(得分:3)
以下是您的工作:
class Test(object):
def __init__(self):
i = [0]
def foo():
i[0] += 1
foo()
print i[0]
t = Test()
这将是nonlocal
关键字的用例,而不是global
,但仅适用于Python 3。