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 "奇数")

  

 

原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13347295.html