网络上介绍 Python 闭包的文章已经很多了,本文将通过解决一个需求问题来了解闭包。
这个需求是这样的,我们需要一直记录自己的学习时间,以分钟为单位。就好比我学习了 2 分钟,就返回 2 ,然后隔了一阵子,我学习了 10 分钟,那么就返回 12 ,像这样把学习时间一直累加下去。
面对这个需求,我们一般都会创建一个全局变量来记录时间,然后用一个方法来新增每次的学习时间,通常都会写成下面这个形式:
time = 0
def insert_time(min):
time = time + min
return time
print(insert_time(2))
print(insert_time(10))
认真想一下,会不会有什么问题呢?
其实,这个在 Python 里面是会报错的。会报如下错误:
UnboundLocalError: local variable 'time' referenced before assignment
那是因为,在 Python 中,如果一个函数使用了和全局变量相同的名字且改变了该变量的值,那么该变量就会变成局部变量,那么就会造成在函数中我们没有进行定义就引用了