• python之闭包函数及匿名函数和三元运算


    1、闭包函数

    # 互相嵌套的函数,如果内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程,叫做闭包;里面的内函数就是闭包函数。
    ​
    # 基本语法
    def func():
        name = "bajie"
        def inner():
            print(name)
        return inner
    res = func()
    res()
    # 复杂版本
    def func():
        money = 1000
    ​
        def outer():
            nonlocal money
            money -= 300
            print(money)
        def inner():
            nonlocal money
            money -= 500
            print(money)
        def going():
            return (outer,inner)
        return going
    ​
    # 第一次执行函数
    going_func = func()
    res = going_func()     # 拿到going_func的返回值 (outer,inner)
    res[0]()               # 执行outer         money == 700
    res[1]()               # 执行inner         money == 200
    res[0]()               # 再次执行outer     money == -100
    res[1]()               # 再次执行inner     money == -600
    ​
    ​
    # 第二次执行函数(   函数名().__closure__    ,  cell_contents  )
    # 获取闭包函数的使用变量
    res1 = func().__closure__       # 如果是闭包,拿到 闭包函数 going 的返回值
    # 用来获取单元格对象当中的闭包函数
    res1[0].cell_contents()         # money == 500
    

      

    1.1闭包的特征

    # 内函数使用了外函数的局部变量,该变量与闭包函数发生绑定,延长了该变量的生命周期
    # 闭包的意义:闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问
    # 示例一
    def func():
        num = 0
        def inner():
            nonlocal num
            num += 1
            return print(num)
        return [inner(),inner(),inner(),inner()]
    ​
    res = func()
    ​
    # 示例二
    def func():
        num = 0
        def inner():
            nonlocal num
            num += 1
            return print(num)
        return inner
    ​
    res = func()
    res()
    res()
    res()
    res()
    

      

    2、三元运算

    # 格式 ---> 真值 if 条件 else 假值
    # 示例一
    num = 10
    if num > 0 :
        print("True")
    else:
        print("False")
        
    # 三元运算表达式
    num = 10
    print("True" if num > 0 else "False" )
    

      

    3、匿名函数(lambda)

    # 格式 ---> lambda 参数 : 返回值
    # 示例一
    def func(n):
        return type(n)
    print(func(10))
    ​
    # lambda 表达式
    print(lambda n : type(n))
    

      

    3.1 lambda + 三元运算

    # 示例一
    def func(n):
        if n % 2 == 0:
            return "偶数"
        else:
            return "奇数"
            
    示例二     
    print(lambda n : "偶数" if n % 2 == 0 else "奇数")
    

      

     

  • 相关阅读:
    Javaweb 第4 天xml 课程
    Javaweb 第2天 JavaScript课程
    Javaweb 第1天 HTML和CSS课程
    第27天反射(解剖)技术
    Ip 讲解
    第26 天网络编程
    第25天多线程、网络编程
    【剑指offer】连续子数组的最大和,C++实现
    [剑指offer]数组中最小的K个数,C++实现
    【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13347295.html
Copyright © 2020-2023  润新知