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)  # []
    
  • 相关阅读:
    遭遇争强好胜
    Redis学习笔记一:数据结构与对象
    Lua模块测试
    SQL JOIN
    Error:(1, 1) java: 非法字符: ‘ufeff’
    Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
    HTTPS为什么又快又安全?
    QA
    linux日志分割、去重、统计
    Maven:dependency scope
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/11727104.html
Copyright © 2011-2022 走看看