匿名函数和闭包

匿名函数

什么是匿名函数

一句话函数,比较简单.

匿名函数的用法

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)  # []

猜你喜欢

转载自www.cnblogs.com/luyi84895838/p/11727104.html