1

如何使此代码正常工作?

def f1():
    def f2():
        print g
        g = 1
        print g
    g = 0
    print g
    f2()
    print g

f1()

预期的结果当然是0、0、1、1,逐行打印

4

2 回答 2

2

如果您不想使用全局变量:

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/

于 2013-11-13T13:41:15.423 回答
0

那这个呢 :

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
于 2013-11-13T13:40:20.417 回答