开发者

Accessing a Variable from Within a Doubly Nested Function in Python

The following code:

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 aft开发者_C百科er f2: ", x
f1()
print "Final:          ", x

prints:

Initialization:  0
In f1 before f2: 1
In f2:           2
In f1 after f2:  1
Final:           2

Is there a way for f2 to access f1's variables?


You can access the variables, the problem is the assignment. In Python 2 there is no way to rebind x to a new value. See PEP 227 (nested scopes) for more on this.

In Python 3 you can use the new nonlocal keyword instead of global. See PEP 3104.


In Python 3, you can define x as nonlocal in f2.

In Python 2, you can't assign directly to f1's x in f2. However, you can read its value and access its members. So this could be a workaround:

def f1():
    x = [1]
    def f2():
        x[0] = 2
    f2()
    print x[0]
f1()


remove global statement:

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


>>> f1()
1
1
1

if you want to change variable x from f1 then you need to use global statement in each function.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜