Appearance
简单再记下 Python 装饰器,记忆不太可信,它会随意删除、更改一些内容。
python
def decorator(fn):
def inner(*args, **kwargs):
return fn(*args, **kwargs)
return inner
def decorator_keep_origin(fn):
from functools import wraps
@wraps(fn)
def inner(*args, **kwargs):
return fn(*args, **kwargs)
return inner
def decorator_with_param(*args, **kwargs):
print(args, kwargs)
return decorator_keep_origin
@decorator
def func_1(foo: str, bar: str):
return foo + bar
@decorator_keep_origin
def func_2(foo: str, bar: str):
return foo + bar
@decorator_with_param(200, message="message")
def func_3(foo: str, bar: str):
return foo + bar
print(func_1.__name__)
print(func_2.__name__)
print(func_3('foo', 'bar'))Console Output:
(200,) {'message': 'message'}
inner
func_2
foobar其中:
- 因为
@decorator_with_param(200, message="message")实际是立即调用了一次decorator_with_param函数,所以先输出 - 通过
functools.wraps可以保留已装饰的函数的名称、描述等信息