在Python中,我对装饰器有所了解。 在我可怜的理解任何装饰功能与原函数构造一个装饰funtion投资申报表(最合理,这应该是一个可调用的):在Python中使用参数进行装饰意味着什么?
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首先调用deco2
与给定Arg和假设,此调用首先构造一个工厂的装饰,然后就像之前foo2的传递给它的顺序返回最终的包装。然而,在这种情况下,有一个额外的“层”涉及(三个而不是两个),这使我很难确定一般规则。
你的第二个装饰器相当于:'foo2 = deco2(“,你好吗?”)(foo2)'放在'foo2'之后。 –
我知道,但在第一种情况下,它只是:foo = deco(foo)'放在foo之后。它是从哪个Python知道添加额外的间接装饰器的参数? – michael