所以我在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
是否有某种规则反对修改外部范围中的变量?
答案 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