从Python中的双嵌套函数中访问变量

时间:2010-02-18 17:18:02

标签: python global-variables nested-function

以下代码:

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 :(得分: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语句。