- 装饰器叠加:
从上到下
装饰,从下到上
执行
def line(func):
def inner():
print("-" * 30)
func()
return inner
def star(func):
def inner():
print("*" * 30)
func()
return inner
@line
@star
def print_content():
print("一杯敬明天,一杯敬过往。")
print_content()
- 对有参数函数进行装饰
1. 无论什么场景,保证函数调用参数个数一致
2. 为了通用,可以使用不定长参数,结合拆包操作进行处理
def decorator(func):
def inner(*args, **kwargs):
print("-" * 30)
func(*args, **kwargs)
return inner
@decorator
def print_num(num, num2, num3):
print(num, num2, num3)
@decorator
def print_num2(num):
print(num)
print_num(666, 888, num3=100)
print_num2(333)
- 对有返回值函数进行装饰
1. 无论什么场景,保证函数返回值一致
def decorator(func):
def inner(*args, **kwargs):
print("-" * 30)
res = func(*args, **kwargs)
return res
return inner
@decorator
def print_num(num, num2, num3):
return num + num2 + num3
@decorator
def print_num2(num):
print(num)
res1 = print_num(666, 888, num3=100)
res2 = print_num2(333)
print(res1, res2)
- 带有参数装饰器
1. 语法:@获取装饰器函数名(参数)
2. 流程:先计算 @ 后面函数,然后把函数返回值当做装饰器
def get_decorator(char):
def decorator(func):
def inner(*args, **kwargs):
print(char * 30)
res = func(*args, **kwargs)
return res
return inner
return decorator
@get_decorator("+")
def pnum(num):
print("66666")
pnum("66666")