1. 闭包函数
定义: 在函数嵌套的前提下, 内部函数使用了外部函数的变量,并且外部函数返回了内部函数的引用(内部函数的名字)
闭包的核心就是内部函数使用了外部函数的变量,这个过程就是闭包
闭包的构成条件:
一定要在函数的嵌套下构成
内部函数一定要使用到外部函数的值
外部函数一定要返回内部函数的引用(内部函数的名字)
def out(num1):
def inner(num2):
result = num2+num1
print(f"外部函数的值:{num1},内部函数的值{num2},"
f"相加的结果为{result}")
return inner
f = out(100)
f(200)
2.装饰器
概念: 就是可以在不修改原来代码的基础上(函数原来的功能),为需要被装饰的函数或者类增加新的功能或者添加限制条件来帮助输出
简单来说就是 不修改原来代码, 增加新的功能或限制条件
装饰器的分类: 函数装饰器 类装饰器 带参数装饰器
构造条件(定义): 装饰器本质就是一个闭包函数
返回值一定是一个函数的引用(函数的名字)
装饰器只能必须具有一个形参 形参是用来接收函数的引用(被装饰函数的名字)
装饰器语法糖写法 :
带参数的装饰器
def mark(flag):
def out_func(fn):
def inner_func(num1, num2):
if flag == '+':
print(f"你输入的实参是{flag},正努力加法运算中...")
result = fn(num1,num2)
elif flag == '-':
print(f"你输入的实参是{flag},正努力加法运算中...")
result = fn(num1, num2)
else:
result = "输入错误"
return result;
return inner_func
return out_func
@mark("+")
def add(num1,num2):
print(num1+num2)
@mark("-")
def sub(num1,num2):
print(num1-num2)
add(1,1)
sub(2,1)
3.生成器
概念: 当函数中使用了yield关键字那么该函数就是生成器
yield和return关键字功能一样,就是返回值,并且结束当前函数的执行,区别就是下次调用该函数会从yield下面继续执行代码