闭包
-
闭包是嵌套在函数中的函数
-
闭包必须是内层函数对外层函数的变量(非全局变量)的引用
-
函数名.code.co_freevars 查看函数的自由变量
-
函数名.code.co_varnames 查看函数的局部变量
-
闭包的作用:保存局部信息不被销毁,保证数据的安全性
-
应用:可以保存一些非全局变量但是不易被销毁,改变的数据,还有装饰器
-
判断闭包的方法:closure
-
def make_averager(): series = [] def averager(new_value): series.append(new_value) total = sum(series) return total/len(series) return averager avg = make_averager() # 函数名.__code__.co_freevars 查看函数的自由变量 print(avg.__code__.co_freevars) # ('series',) 当然还有一些参数,仅供了解: # 函数名.__code__.co_freevars 查看函数的自由变量 print(avg.__code__.co_freevars) # ('series',) # 函数名.__code__.co_varnames 查看函数的局部变量 print(avg.__code__.co_varnames) # ('new_value', 'total') # 函数名.__closure__ 获取具体的自由变量对象,也就是cell对象。 # (<cell at 0x0000020070CB7618: int object at 0x000000005CA08090>,) # cell_contents 自由变量具体的值 print(avg.__closure__[0].cell_contents) # []