【发布时间】:2012-08-12 19:32:14
【问题描述】:
在下面的第二种情况下,Python 尝试查找局部变量。当它找不到时,为什么它不能像第一种情况那样在外部范围内查找?
这会在本地范围内查找 x,然后在外部范围内查找:
def f1():
x = 5
def f2():
print x
这给出了local variable 'x' referenced before assignment 错误:
def f1():
x = 5
def f2():
x+=1
我不能修改函数 f2() 的签名,所以我不能传递和返回 x 的值。但是,我确实需要一种方法来修改 x.有没有办法明确告诉 Python 在外部范围内查找变量名(类似于 global 关键字)?
Python 版本:2.7
【问题讨论】:
-
python 3 为此提供了
nonlocal,但我认为值得一问为什么需要这样做。这比使用global安全一点,但仍然感觉不对。 -
@mgilson 这样做有很多很好的理由,例如pep-3104 中的基本原理部分。
-
你用的是什么版本的python?
-
@soulcheck 我使用 Python 2.7,在我的问题中对其进行了编辑。
-
@Dhara 抱歉,不知道为什么会发布评论。很明显,您使用的是 2.7。