在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