闭包与装饰器、装饰器工厂的联系与区别
闭包、装饰器、装饰器工厂的关系闭包装饰器装饰器工厂
注意语法糖和@符号未使用语法糖的代码使用@语法糖的代码
装饰器与闭包
闭包、装饰器、装饰器工厂的关系
闭包
闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定有参数
装饰器
装饰器是特殊的闭包,其参数是一个函数,形成一个闭包就是装饰器了。装饰器的返回值也是一个函数对象
装饰器工厂
装饰器工厂就是有参数的装饰器
注意
只要函数声明使用了装饰器,就会自动执行装饰器的内容,只不过没有执行装饰器内部的函数,只有调用被装饰的函数时,才会执行装饰器内部的函数。
语法糖和@符号
在用装饰器去装饰某个函数的时候,@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作。
未使用语法糖的代码
def decoratied(func
):
def inner(*args
,**kwargs
):
return func
(*args
,**kwargs
)
return inner
def f1(a
,b
):
return f
"执行结果为{a+b}"
print("未加语法糖的结果",decoratied
(f1
)(3,4))
运行结果为:
使用@语法糖的代码
def decoratied(func
):
def inner(*args
,**kwargs
):
return func
(*args
,**kwargs
)
return inner
@decoratied
def f1(a
,b
):
return f
"执行结果为{a+b}"
print("使用语法糖的结果为:",f1
(3,4))
装饰器与闭包
装饰器
闭包
装饰器的执行顺序/原理