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

2020-06-26  本文已影响0人  KeHaoo

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

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

上一篇 下一篇

猜你喜欢

热点阅读