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