爲什麼裝飾器的參數不工作?在python中傳遞參數給裝飾器
def decAny(f0):
def wrapper(s0):
return "<%s> %s </%s>" % (any, f0(), any)
return wrapper
@decAny('xxx')
def test2():
return 'test1XML'
print(test2())
總是給我一個錯誤說「str是不可呼叫」 它試圖執行返回字符串包裝(內) ,而不是對其進行處理並返回結果字符串
想想這樣說:你之前甚至_get_裝飾'test2',你叫'decAny('xxx')'。但'decAny'接受一個函數,'f0',而不是一個字符串。很明顯,在某個時候,'f0()'會試圖調用''xxx''。 – abarnert 2013-03-25 21:16:42
好吧,但是像沒有參數的修飾器一樣,爲什麼編譯器不會假定第一個參數是客戶端函數... – ZEE 2013-03-25 21:48:15
這不是參數問題。如果你有'@ decAny',那就是使用'decAny'本身作爲裝飾器。但是如果你有'@decAny()',那麼在你裝飾之前就調用'decAny',就像'@decAny('xxx')'一樣。 (這就像當你將函數作爲值傳遞時一樣,將它們存儲在變量等中,而不是調用它們) – abarnert 2013-03-25 21:57:56