从 Python 中的双重嵌套函数内访问变量
以下代码:
x = 0
print "Initialization: ", x
def f1():
x = 1
print "In f1 before f2:", x
def f2():
global x
x = 2
print "In f2: ", x
f2()
print "In f1 after f2: ", x
f1()
print "Final: ", x
打印:
Initialization: 0
In f1 before f2: 1
In f2: 2
In f1 after f2: 1
Final: 2
f2
有办法访问 f1
的变量吗?
The following code:
x = 0
print "Initialization: ", x
def f1():
x = 1
print "In f1 before f2:", x
def f2():
global x
x = 2
print "In f2: ", x
f2()
print "In f1 after f2: ", x
f1()
print "Final: ", x
prints:
Initialization: 0
In f1 before f2: 1
In f2: 2
In f1 after f2: 1
Final: 2
Is there a way for f2
to access f1
's variables?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以访问变量,问题是赋值。在 Python 2 中,无法将 x 重新绑定到新值。有关详细信息,请参阅 PEP 227(嵌套范围)。
在 Python 3 中,您可以使用新的
nonlocal
关键字而不是global
。请参阅 PEP 3104。You can access the variables, the problem is the assignment. In Python 2 there is no way to rebind
x
to a new value. See PEP 227 (nested scopes) for more on this.In Python 3 you can use the new
nonlocal
keyword instead ofglobal
. See PEP 3104.在 Python 3 中,您可以将 x 定义为 nonlocal 在 f2 中。
在Python 2中,你不能直接给f2中的f1的x赋值。但是,您可以读取其值并访问其成员。所以这可能是一个解决方法:
In Python 3, you can define x as nonlocal in f2.
In Python 2, you can't assign directly to f1's x in f2. However, you can read its value and access its members. So this could be a workaround:
删除
global
语句:如果您想从
f1
中更改变量x
那么您需要使用global每个函数中的
语句。remove
global
statement:if you want to change variable
x
fromf1
then you need to useglobal
statement in each function.