在Python3中保留一个非局部但非全局的变量

在Python3中保留一个非局部但非全局的变量,python,python-3.x,python-nonlocal,Python,Python 3.x,Python Nonlocal,所以我在Python3.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]() 然后看看最后一行是否会像javascript一样打印出大于56的数字

所以我在Python3.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]()
然后看看最后一行是否会像javascript一样打印出大于56的数字(我想)

但是相反,它使“paw”中的“x”成为本地的,因为我调用了
+=
(对吗?),并且当它试图将其放入
x+=1

  File "C:/Users/Nancy/Desktop/delete2.py", line 3, in paw
    x+=1
UnboundLocalError: local variable 'x' referenced before assignment
是否有某种规则禁止修改外部范围中的变量

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

显式地告诉Python它是非本地的:

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

啊,谢谢,非本地/全局x必须在作业之前到达吗?