5

以下代码:

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的变量?

4

3 回答 3

6

在 Python 3 中,您可以在 f2 中将x 定义为非本地的。

在 Python 2 中,您不能直接将 f1 的 x 赋值给 f2。但是,您可以读取其值并访问其成员。所以这可能是一种解决方法:

def f1():
    x = [1]
    def f2():
        x[0] = 2
    f2()
    print x[0]
f1()
于 2010-02-18T17:25:11.330 回答
6

您可以访问变量,问题是分配。在 Python 2 中,无法重新绑定x到新值。有关更多信息,请参阅PEP 227(嵌套范围)。

在 Python 3 中,您可以使用 newnonlocal关键字代替global. 参见PEP 3104

于 2010-02-18T17:25:24.760 回答
0

删除global语句:

>>> x
0
>>> def f1():
    x = 1
    print(x)
    def f2():
        print(x)
    f2()
    print(x)


>>> f1()
1
1
1

如果要更改变量xf1则需要global在每个函数中使用语句。

于 2010-02-18T17:24:34.683 回答