装饰器极大的简化了开发流程, 在不用更改代码的状况下对函数进行扩展, 下面是对装饰器的应用案例
基本使用
- 定义装饰器如下
# 定义一个装饰器
def func(print_nums):
def wrapper(*args, **kwargs):
print('wrapp')
return print_nums
return wrapper
- 装饰函数并打印
# 定义函数并用装饰器装饰
@func
def print_nums(num):
a = num
print(a)
# 执行打印被装饰函数名字(发现名字改变)
if __name__ == '__main__':
print(print_nums.__name__)
# 打印结果为
wrapper
如何修改使被装饰函数函数名不发生变化
方式一
def func(print_nums):
def wrapper(*args, **kwargs):
print('wrapp')
return print_nums
wrapper.__name__ = print_nums.__name__ # 将函数名重新改回来
return wrapper
方式二
# 方式二:使用functools.wrap()
import functools
def func(print_nums):
@functools.wraps(print_nums)
def wrapper(*args, **kwargs):
print('wrapp')
return print_nums
return wrapper