题目:利用闭包返回一个计数器函数,每次调用它返回递增整数
我一开始是这么写的
def createCounter():
i = 0
def counter():
i+=1
return i
return counter
但是发生了报错
Traceback (most recent call last):
File "main.py", line 12, in <module>
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
File "main.py", line 6, in counter
i+=1
UnboundLocalError: local variable 'i' referenced before assignment
包括整数1也是对象,而且最重要的是Python中整形是不可变的,i和i+1指向的是两块不同的地址。在内函数中执行 i = i + 1 时,机器并不知道你是想创建一个局部变量i 呢还是想做赋值操作
而此处又不能使用global
去声明为全局变量,后来发现可以使用nonlocal
去声明非本地非全局变量
可以参考这篇文章Python学习:关键字global和nonlocal的用法说明,感谢这位老哥的文章
其实除了使用nonlocal
去声明解决以外 还可以使用list
去解决,因为使用list
的时候是对这个可变数据类型进行修改并没有声明新的变量