要创建一个可以使用或不使用参数的Python装饰器,您可以使用以下方法:
functools.wraps
装饰器来保留原始函数的元数据,例如名称、文档字符串等。以下是一个示例:
import functools
def my_decorator(func=None, *, arg1=None, arg2=None):
def decorator_wrapper(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print(f"Before function: {arg1=}, {arg2=}")
result = func(*args, **kwargs)
print(f"After function: {arg1=}, {arg2=}")
return result
return wrapper
if func is None:
return decorator_wrapper
else:
return decorator_wrapper(func)
# 使用装饰器,不使用参数
@my_decorator
def my_function():
print("Inside my_function")
# 使用装饰器,并使用参数
@my_decorator(arg1="value1", arg2="value2")
def my_function_with_args():
print("Inside my_function_with_args")
my_function()
my_function_with_args()
输出:
Before function: arg1=None, arg2=None
Inside my_function
After function: arg1=None, arg2=None
Before function: arg1=value1, arg2=value2
Inside my_function_with_args
After function: arg1=value1, arg2=value2
在这个示例中,my_decorator
可以接受一个或多个参数,并根据需要执行不同的操作。如果没有提供参数,则默认为 None
。当使用 @my_decorator
时,将不使用参数。当使用 @my_decorator(arg1="value1", arg2="value2")
时,将使用参数。
高校公开课
腾讯云数据湖专题直播
小程序云开发官方直播课(应用开发实战)
Elastic 实战工作坊
Elastic 实战工作坊
云+社区技术沙龙[第14期]
云+社区技术沙龙[第27期]
Elastic 实战工作坊
云+社区沙龙online [国产数据库]
DB-TALK 技术分享会
领取专属 10元无门槛券
手把手带您无忧上云