嵌套装饰器?(Python)

2024-09-28 15:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现,我可以用两种不同的方式装饰函数,以实现相同的函数“装饰”:

def greeting(expr):
    def greeting_decorator(func):
        def function_wrapper(x):
            print(expr + ", " + func.__name__ + " returns:")
            func(x)
        return function_wrapper
    return greeting_decorator

def foo(x):
    return x

greeting2 = greeting("Good morning!")
foo = greeting2(foo)

或者。。。在

^{pr2}$

请注意,第一个示例可以更改为使用“at”符号:

@greeting("Good morning!")
def foo(x):
    return x

但是在第二个decorator函数示例中使用at符号会导致崩溃,这是可以理解的。在

我的问题是,除了要包装的函数之外,在decorator函数中包含其他参数的方法中,哪一种是首选的?第二种方法似乎更容易让人绞尽脑汁,如果需要更多额外的参数,可能会更具伸缩性。使用它有什么缺点吗?在


Tags: 函数示例returnfoodeffunction装饰decorator