zoukankan      html  css  js  c++  java
  • 匿名函数和闭包

    匿名函数

    什么是匿名函数

    一句话函数,比较简单.
    

    匿名函数的用法

    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)  # []
    
  • 相关阅读:
    纯JavaScript实现HTML5 Canvas六种特效滤镜
    玩转html5 的 canvas画图
    为什么 ++[[]][+[]]+[+[]] = 10?
    作用域和闭包
    7 个令人惊讶的 JavaScript “特
    60个有用css代码片段
    函数
    数组
    我们为什么要尝试前后端分离
    javascript面向对象——构造函数和原型对象
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/11727104.html
Copyright © 2011-2022 走看看