以下代码:
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
的变量?
答案 0 :(得分:6)
在Python 3中,您可以在f2中将x定义为nonlocal。
在Python 2中,你不能直接分配给f2中的f1的x。但是,您可以读取其值并访问其成员。所以这可能是一种解决方法:
def f1():
x = [1]
def f2():
x[0] = 2
f2()
print x[0]
f1()
答案 1 :(得分:6)
您可以访问变量,问题是分配。在Python 2中,无法将x
重新绑定到新值。有关详细信息,请参阅PEP 227(嵌套作用域)。
在Python 3中,您可以使用新的nonlocal
关键字而不是global
。请参阅PEP 3104。
答案 2 :(得分:0)
删除global
声明:
>>> x
0
>>> def f1():
x = 1
print(x)
def f2():
print(x)
f2()
print(x)
>>> f1()
1
1
1
如果您想从x
更改变量f1
,则需要在每个函数中使用global
语句。