在python 3中保持一个非本地变量而不是全局变量

时间:2014-09-12 19:07:53

标签: python python-3.x python-nonlocal

所以我在python 3.4.1中有一小段代码,我只是在玩闭包

def bam(x):
    def paw():
        x+=1
        print(x)
    def bang():
        x+=1
        print(x)
    return paw, bang

最初我想知道我是否可以打电话

a=bam(56)
a[0]()
a[0]()
a[0]()
a[0]()
a[1]()

然后查看最后一行是否会打印大于56的数字,就像它javascript(我认为)

但是它在'paw'本地制作'x'是因为我调用+=(对吗?)并且当它试图在x+=1中获取它时抛出错误

  File "C:/Users/Nancy/Desktop/delete2.py", line 3, in paw
    x+=1
UnboundLocalError: local variable 'x' referenced before assignment

是否有某种规则反对修改外部范围中的变量?

1 个答案:

答案 0 :(得分:2)

分配给x ,这意味着Python默认为x是本地的。

明确告诉Python它是nonlocal而不是:

def bam(x):
    def paw():
        nonlocal x
        x+=1
        print(x)
    def bang():
        nonlocal x
        x+=1
        print(x)
    return paw, bang