1. 装饰带有参数的函数
# 添加输出日志的功能 def logging(fn): def inner(num1, num2): print("--正在努力计算--") fn(num1, num2) return inner # 使用装饰器装饰函数 @logging def sum_num(a, b): result = a + b print(result) sum_num(1, 2)
运行结果:
--正在努力计算-- 3
2. 装饰带有返回值的函数
# 添加输出日志的功能 def logging(fn): def inner(num1, num2): print("--正在努力计算--") result = fn(num1, num2) return result return inner # 使用装饰器装饰函数 @logging def sum_num(a, b): result = a + b return result result = sum_num(1, 2) print(result)
运行结果:
--正在努力计算-- 3
3. 装饰带有不定长参数的函数
# 添加输出日志的功能 def logging(fn): def inner(*args, **kwargs): print("--正在努力计算--") fn(*args, **kwargs) return inner # 使用语法糖装饰函数 @logging def sum_num(*args, **kwargs): result = 0 for value in args: result += value for value in kwargs.values(): result += value print(result) sum_num(1, 2, a=10)
运行结果:
--正在努力计算-- 13
4. 通用装饰器
# 添加输出日志的功能 def logging(fn): def inner(*args, **kwargs): print("--正在努力计算--") result = fn(*args, **kwargs) return result return inner # 使用语法糖装饰函数 @logging def sum_num(*args, **kwargs): result = 0 for value in args: result += value for value in kwargs.values(): result += value return result @logging def subtraction(a, b): result = a - b print(result) result = sum_num(1, 2, a=10) print(result) subtraction(4, 2)
运行结果:
--正在努力计算-- 13 --正在努力计算-- 2
5. 小结
- 通用装饰器的语法格式:
# 通用装饰器 def logging(fn): def inner(*args, **kwargs): print("--正在努力计算--") result = fn(*args, **kwargs) return result return inner