有沒有一種方法來獲取參數給裝飾器給定函數被包裝?例如,如何獲得裝飾參數?
@job('default')
def update_index():
call_command("update_index", remove=True)
func = update_index
args = ?? # How to use 'func' to get the string 'default' here?
有沒有一種方法來獲取參數給裝飾器給定函數被包裝?例如,如何獲得裝飾參數?
@job('default')
def update_index():
call_command("update_index", remove=True)
func = update_index
args = ?? # How to use 'func' to get the string 'default' here?
一般來說,你不能。
job('default')
執行第一個;返回的是用作裝飾器;在本質上,Python做:
def update_index():
call_command("update_index", remove=True)
update_index = job('default')(update_index)
因此,job('default')
可以返回什麼。它可以返回一個什麼都不做的功能,但返回它的說法:
def job(value):
return lambda f: f
此不做任何處理value
,返回的「裝飾」是一個空操作,它返回原有功能不變。
對於特定修飾器,它可能是他們留下了一個閉包或額外的屬性,我們可以反思。但這真的取決於特定的裝飾者。
我不遵循'job('default')'的返回值是如何進入這裏的......我不想執行裝飾器或'update_index()' – jess
@jess:這就是裝飾器語法*作品*。 '@'後的位是表達式。它被評估。結果是裝飾器可調用,然後調用傳入的函數 - 裝飾,返回值是用於命名函數。 –
@jess:'update_index()'不在這裏執行。但裝飾者*是*,這就是應用裝飾者的意思。 –
這似乎並不適用於此。他正在尋找包裝函數的參數,而不是裝飾器的參數。 – jess