在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
的变量呢?
3 个回答
0
去掉 global
语句:
>>> x
0
>>> def f1():
x = 1
print(x)
def f2():
print(x)
f2()
print(x)
>>> f1()
1
1
1
如果你想在 f1
函数里 改变 变量 x
的值,那么你需要在每个函数里都使用 global
语句。
6
在Python 3中,你可以在f2函数里把x定义为nonlocal,这样就可以使用外层函数f1里的x了。
而在Python 2中,你不能直接在f2里给f1的x赋值。不过,你可以读取x的值和访问它的成员。所以可以用这种方法来解决这个问题:
def f1():
x = [1]
def f2():
x[0] = 2
f2()
print x[0]
f1()