在python中的嵌套函数之间共享局部变量

时间:2013-11-13 13:28:26

标签: python local-variables

如何让此代码生效?

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

f1()

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

2 个答案:

答案 0 :(得分: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通过使用非本地语句修复它:

http://technotroph.wordpress.com/2012/10/01/python-closures-and-the-python-2-7-nonlocal-solution/

答案 1 :(得分: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