用Python中的参数来装饰意味着什么?

2024-05-14 18:23:59 发布

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

在Python中,我对decorators略知一二。 在我的理解中,修饰函数声明返回修饰函数与原始函数一起构造的任何内容(最合理地说,这应该是可调用的):

def deco(func):
    def func_wrapper(name):
        return func(name)+", how are you?"
    return func_wrapper

@deco
def foo(name):
    return "Hello "+name

print(foo("Michael"))

这将提供:

Hello Michael, how are you?

但是,如果一个装饰器与一个参数一起指定:

def deco2(info):
    def info_decorator(func):
        def func_wrapper(name):
            return func(name) + info
        return func_wrapper
    return info_decorator

@deco2(", how are you?")
def foo2(name):
    return "Hello "+name

print(foo2("Regina"))

给予

Hello Regina, how are you?

处理这个装修工的“规则”是什么? 似乎不是返回foo2,而是Python首先用给定的arg调用deco2假设,这个调用首先为decorator构造一个工厂,然后像以前一样传递foo2给它,以返回最终的包装器。然而,在这种情况下,还有一个额外的“”(三个def而不是两个def),这使我很难确定一般规则。你知道吗


Tags: 函数nameinfoyouhelloreturndefdecorator
1条回答
网友
1楼 · 发布于 2024-05-14 18:23:59

如果应用decorator而不使用参数,例如@foo,那么decorator将被修饰的函数作为其参数,并期望返回将替换修饰函数的任何可调用函数。你知道吗

如果使用参数应用decorator,例如@foo('bar'),那么decorator将返回一个可调用函数,该函数将以decorated函数作为其参数,并返回和可调用函数,该函数将替换decorated函数。你知道吗

换句话说:没有参数的decorator只需要被修饰的函数,但是有参数的decorator需要自己的参数它需要以某种方式获得被修饰的函数。由于decorator的参数是任意的,并且没有任何限制,因此很难提出任何非限制性的规则来另外将decorator传递给它。在这种情况下,将应用两个步骤:获取decorator参数,然后返回另一个接受decoratee的callable。你知道吗

相关问题 更多 >

    热门问题