2017-12-03 83 views

回答

3

我認爲這是說裝飾函數在應用裝飾器之前從未真正分配給名稱空間中的任何內容。當你用裝飾器寫一個函數時,你寫的函數作爲參數傳遞給裝飾器,然後裝飾器返回的對象被視爲函數。這裏有一個簡單的例子:

def dec(func): 
    print('times_two' in globals()) 
    def _inner(*args, **kwargs): 
    print("Decorated") 
    return func(*args, **kwargs) 
    return _inner 

@dec 
def times_two(x): 
    return x*2 

print('times_two' in globals()) 

你可以看到這個運行hereprintdec表示False,因爲名稱「times_two」在裝飾器完成「裝飾」功能之前未綁定到任何東西。

+0

「一個函數定義可以被一個或多個裝飾器表達式包裝,裝飾器表達式在函數定義時被計算,在包含函數定義的範圍中,結果必須是可調用的,調用函數對象作爲只有參數,返回值綁定到函數名而不是函數對象,多個裝飾器以嵌套的方式應用,例如下面的代碼「這兩個語句是否相同? –

+0

@HongliBu哪兩句話? –

+0

我的問題和評論中的陳述 –