0

所以我在 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]()

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

但相反,它在“爪子”中制作了“x”,因为我调用+=了(对吗?),当它尝试获取它时它会抛出一个错误x+=1

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

是否有某种规则禁止在外部范围内修改变量?

4

1 回答 1

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
于 2014-09-12T19:09:23.807 回答