关于python的闭包的使用所会遇到的问题

题目:利用闭包返回一个计数器函数,每次调用它返回递增整数
我一开始是这么写的

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的时候是对这个可变数据类型进行修改并没有声明新的变量

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。