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