通用装饰器模型
def use_logging(func):
def wrapper(*args,**kwargs):
print(f'{func.__name__} is running')
return func(*args, **kwargs)
return wrapper
@use_logging
def bar(a,b):
print(a)
print(b)
print('this is bar')
bar('a', 'b')
装饰器设置参数
def use_logging(level):
def decorator(func):
def wrapper(*args,**kwargs):
if level == 'warn':
print(f'{func.__name__} is name')
return func(*args,**kwargs)
return wrapper
return decorator
@use_logging(level='warn')
def foo(name='foo'):
print('name',name)
foo()
保留函数的元信息
from functools import wraps
def use_logging(level):
def decorator(func):
@wraps(func)
def wrapper(*args,**kwargs):
if level == 'warn':
print(f'{func.__name__} is name')
return func(*args,**kwargs)
return wrapper
return decorator
@use_logging(level='warn')
def foo(name='foo'):
'haha---------------->'
print('name',name)
foo()
print(foo.__name__)
print(foo.__doc__)
参考
https://blog.csdn.net/ncepu_Chen/article/details/106075394
https://www.bilibili.com/video/BV1SZ4y1s7cv?p=2
https://www.zhihu.com/question/26930016
https://wiki.python.org/moin/PythonDecoratorLibrary#Creating_Well-Behaved_Decorators_.2F_.22Decorator_decorator.22