闭包的概念
必须要有函数嵌套,内部函数调用外部函数的变量
简单的例子
此种方法会导致每次使用内部函数inner的时候需要不断的调用外部函数。
结果导致外部函数的变量不断的被调用被释放,比较低效,相当于本来一个函数你现在用起来需要用到两个函数。
1 def outer(): 2 a = 1 3 def inner(): 4 print(a) 5 inner() 6 print(inner.__closure__) # 输出有cell 表示为闭包,为None不是闭包 7 outer() # (<cell at 0x0000000000150108: int object at 0x000007FEE62BD420>,)
常用的闭包用返回值完成
通过返回值拿到内部函数的地址,然后赋值直接运行即可直接运行内部函数
从而让内部函数调用的变量可以长久保存,而不至于每次使用创建结束释放这样低效的行为
1 def outer(): 2 a = 1 3 def inner(): 4 print(a) 5 return inner 6 inn = outer() 7 inn() 8 print(inn.__closure__) # (<cell at 0x0000000000340108: int object at 0x000007FEE0DFD420>,)