您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将额外的参数传递给Python装饰器?

如何将额外的参数传递给Python装饰器?

由于您像函数一样调用装饰器,因此它需要返回另一个函数,即实际的装饰器:

def my_decorator(param):
    def actual_decorator(func):
        print("Decorating function {}, with parameter {}".format(func.__name__, param))
        return function_wrapper(func)  # assume we defined a wrapper somewhere
    return actual_decorator

外部函数将获得您显式传递的所有参数,并且应返回内部函数。内部函数将被传递给函数进行装饰,并返回修改后的函数

通常,您希望装饰器通过将其包装在包装函数中来更改功能行为。这是一个示例,可以在调用函数添加日志记录:

def log_decorator(log_enabled):
    def actual_decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            if log_enabled:
                print("Calling Function: " + func.__name__)
            return func(*args, **kwargs)
        return wrapper
    return actual_decorator

functools.wraps调用名称和文档字符串之类的内容复制到包装函数,以使其与原始函数更相似。

用法示例:

>>> @log_decorator(True)
... def f(x):
...     return x+1
...
>>> f(4)
Calling Function: f
5
python 2022/1/1 18:43:36 有331人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶