zoukankan      html  css  js  c++  java
  • 9.闭包函数

    闭包函数

    1.全局变量与局部变量

    """
    全局变量:在函数外部或者在函数内部使用global定义的变量叫做全局变量
    局部变量:在函数内部定义的变量叫内部变量
    
    作用域:作用范围
        全局变量:横跨整个文件
        局部变量:只在函数内部
    
    生命周期:变量存活的时间
        内置变量>全局变量>局部变量
    """
    """
    如果函数外部没有该全局变量,可以通过global在函数内部创建一个全局变量
    如果函数外部有该全局变量,可以通过global修改全局变量
    """
    

    2.函数名的使用

    # 函数名可以像变量一样
    """
    创建
    删除销毁
    当参数传递
    作为返回值
    作为容器中的元素
    """
    

    3.函数的嵌套

    """
    相互嵌套的两个函数:外层的函数是外函数,内层的函数是内函数
    内部函数在函数内部调用时:必须先定义,才能调用,没有预加载机制
    LEGB就近原则:
    从内向外依次寻找
    """
    

    4.局部变量与全局变量相关函数

    1.global 内函数可通过global创建,修改全局变量
    2.nonlocal专门修改局部变量:就近原则
    """
        先找当前作用域上一层空间的变量进行修改
        如果上一层不存在,继续向上一层空间进行寻找
        直到最后找不到,直接报错
    """
    3 locals() 获取当前作用域的变量
    """
    在函数外,获取的是打印之前的所有全局变量
    在函数内,获取的当前作用域调用之前的所有局部变量
    locals()返回的是一个字典
    """
    4 globals() 获取的是全局变量
    """
    无论函数内外,获取的都是打印之前的所有的全局变量
    globals()返回的是系统内置的一个字典
        可以通过向内置字典中添加键值对的方式,来实现全局变量的创建
    """
    # 批量创建全局变量
    def func():
        dic=globals()
        for i in range(5):
            dic["a{}".format(i)]=i  #批量创建5个全局变量
        return dic
    res=func()  #调用函数
    print(a1,a2,a3) #打印全变量值 1 2 3,查看是否定义成功
    print(res)  
    
    

    5.闭包函数

    # 闭包函数:
    """
    相互嵌套的两个函数
        内函数使用了外函数的变量
        外函数将内函数返回return的过程叫闭包
        返回的内函数叫做闭包函数
    """
    # 闭包函数的特点和意义:
    """
    特点:延长变量的生命周期,直到脚本运行结束
    意义:闭包可以优先使用内函数中的变量,并对闭包中的值起到了封装保护的作用,外部无法访问
    """
    def outer(a):
        def inner():
            print(a)
        return inner
    res=outer(11)
    res()
    
    # 判断函数是不是闭包函数
    """
    __closure__:如果返回None,函数不是闭包函数,否则是闭包函数
    cell_contents:获取closure中的单元,随机获取
    """
    
    

    6.匿名函数

    """
    用一句话来表达,只有返回值的函数叫做匿名函数
    语法:lambda 参数:返回值    (不用return)
    特点:简洁,高效
    """
    # 无参的匿名函数
    func=lambda :"dksl"
    print(func())
    
    # 有参数 的匿名函数
    func=lambda a:print(a)
    func(22)
    
    # 带有判断条件的匿名函数
    func=lambda a,b: a if a>b else b
    res=func(11,22)
    print(res)
    
    # 三元运算(只能在双项分支上可以使用)
    """
    语法:
        真值 if 条件表达式 else 假值
        条件表达式成立返回真值,否则返回假值
    """
    
    
  • 相关阅读:
    蓝桥杯 大数定理
    蓝桥杯 密码发生器
    简单定时器的使用
    Eclipse中更改Project Explorer的字体
    列的别名修改
    ||拼接字符串
    SQL知识总结
    java 打开记事本
    报表使用分组
    js处理异步问题
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14083436.html
Copyright © 2011-2022 走看看