带有参数的装饰器
带有参数的装饰器
就是使用装饰器装饰函数的时候可以传入指定参数
语法格式:@装饰器(参数,…)
@decorator('+')
def add(a, b):
result = a + b
return result
带有参数的装饰器的使用
需求:如以下的add函数和sub函数,使用一个装饰器对二者修饰
装饰产生的功能为:识别两个函数使用的是加法还是减法
def add(a, b):
result = a + n
return result
def sub(a, b):
result = a - b
return result
示例: 错误演示
# 装饰器
# 外部函数
def decorator(fn, flag):
# 内部函数
def inner(num1, num2):
# 判断流程
if flag == '+':
print('--正在努力加法计算--')
elif flag == '-':
print('--正在努力减法计算--')
result = fn(num1, num2)
return result
return inner
# 被带有参数的修饰器修饰的函数
@decorator('+')
def add(a, b):
result = a + b
return result
# 执行函数
result = add(1, 3)
print(result)
示例:正确使用
# 装饰器
def logging(flag): # flag = "+"
# 外部函数
def decorator(fn):
# 内部函数
def inner(num1, num2):
# 判断流程
if flag == '+':
print('--正在努力加法计算--')
elif flag == '-':
print('--正在努力减法计算--')
result = fn(num1, num2)
return result
return inner
# 返回装饰器
return decorator
# 被带有参数的修饰器修饰的函数
@logging('+') # 1. logging("+") 2. @decorator起到了装饰器的功能了
def add(a, b):
result = a + b
return result
# 执行函数
result = add(1, 3)
print(result)
带参数的装饰器:
- 装饰器的外部函数只接收一个参数——被装饰的函数
- 需要给装饰器传参数需要再装饰器外部再增加一个函数