如何使此代码正常工作?
def f1():
def f2():
print g
g = 1
print g
g = 0
print g
f2()
print g
f1()
预期的结果当然是0、0、1、1,逐行打印
如何使此代码正常工作?
def f1():
def f2():
print g
g = 1
print g
g = 0
print g
f2()
print g
f1()
预期的结果当然是0、0、1、1,逐行打印
如果您不想使用全局变量:
def f1():
def f2():
print g[0]
g[0] = 1
print g[0]
g =[0]
print g[0]
f2()
print g[0]
f1()
这是为了解决无法重新分配属于外部范围的变量的问题。当您重新分配它时,您基本上会在嵌套函数中创建一个新变量。为了解决这个问题,你将你的值包装在一个列表中,然后重新分配列表的元素。
这是 python 2 中的一个问题。Python 3 通过使用 nonlocal 语句解决了这个问题:
http://technotroph.wordpress.com/2012/10/01/python-closures-and-the-python-2-7-nonlocal-solution/
那这个呢 :
def f1():
def f2():
global g
print g
g = 1
print g
global g
g = 0
print g
f2()
print g
f1()
输出 :
0
0
1
1