Python函数的装饰器

时间:2025-04-01 18:04:01

函数的装饰器.

1. 装饰器

开闭原则:

对功能的扩展开放

对代码的修改是封闭

通用装饰器语法:

def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
@wrapper
def func():
pass
func()

2. 同一个函数被多个装饰器装饰

就近原则

def wrapper1(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner def wrapper2(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner def wrapper3(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner
# 顺序 1 2 3 func 3 2 1
@wrapper1
@wrapper2
@wrapper3
def func():
print("我是谁,我在哪")
func() # 1 3 5 我是谁,我在哪 6 4 2

3. 带参数的装饰器

def wrapper_out(参数):
def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
return wrapper
@wrapper_out(实参) # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
def func():
pass