匿名函数
什么是匿名函数
一句话函数,比较简单.
匿名函数的用法
lambda(关键字) x,y(参数,一般为位置参数):x+y(返回值)
匿名函数一般结合字典,内置函数.
fun=lambda a:a+1
print(fun(1))
将fun中的1传给a, 冒号后为函数返回值
闭包
闭包存在的地方
闭包只能存在嵌套的函数中
闭包的作用
保证的数据的安全
闭包的定义
内层函数对外层函数非全局变量的引用(使用)就会形成闭包.
闭包的特点
被引用的非全局变量也称作自由变量.这个自由变量会与内层函数产生一个绑定关系.自由变量不会在内层中消失
如何用代码判断是不是闭包:
print(外层函数返回值().__code__.co_freevars)
def wrapper():
a = 1
def inner():
print(a)
return inner
ret = wrapper()
print(ret.__code__.co_freevars)
一些其他的函数内置方法:
# 函数名.__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) # []