懵逼了,希望大佬指点
Topic source第二种在执行counter()函数时,python将等号左边的s视为局部变量,在函数执行的时候就会在counter内寻找等号右边的s的值,由于闭包将外部函数的s = 0屏蔽掉,所以就找不到s的赋值,因此报错,在地中方法中list的值不是放在栈里,所以不会被屏蔽
def createCounter():
s=0
def counter():
nonlocal s
s+=1
return s
return counter
需要使用nonlocal才可以改变s,否则只能调用s=0,不能改值。
- 1
大嘴巴鲶鱼精
为什么第二种方式会报错