我有2個問題。我創建了一個裝飾器來檢查字典是否有密鑰?這裏是。Python-我可以在函數內使用裝飾器嗎?
def check_has_key(func):
def inner(x,y): # inner function needs parameters
dictionary = {"add" : "true", "subtract" : "true"}
if dictionary.has_key("add") :
return func(x,y)
return "Add not allowed"
return inner # return the inner function (don't call it)
@check_has_key
def add(x,y):
return x+y
print add(1,2)
1)我可以傳遞密鑰作爲參數來包裝,然後檢查它是否存在與否?例如: - 就像我通過的密鑰爲@check_has_ket("subtact")
。
2)我可以在函數內部使用裝飾器嗎?如果我需要檢查字典是否有密鑰,深入該函數?
編輯
我得到了第一問題的答案。
def abc(a):
def check_has_key(func):
def inner(x,y): # inner function needs parameters
dictionary = {"add" : "true", "subtract" : "true"}
if dictionary.has_key(a) :
return func(x,y)
return "Add not allowed"
return inner # return the inner function (don't call it)
return check_has_key
@abc("subtract")
def add(x,y):
return x+y
print add(1,2)
但我的疑問仍然存在,我可以使用裝飾深入功能?這意味着如果我需要檢查字典中是否存在關鍵字,或者沒有深入瞭解函數,我可以使用裝飾器來達到這個目的,還是隻需要使用if條件?
爲什麼你要定義字典_內側函數?不會'dictionary.has_key'永遠是真的呢?無論如何你創建裝飾器函數的目標是什麼?順便說一句,你可以在你定義函數的地方使用裝飾器。 – aIKid
(1)裝飾器只在定義一個函數時使用,或者我可以像這樣使用,意思是在行或代碼之間? (2)裝飾器執行的順序是什麼,如果我在1個函數上有多個裝飾器? –
也許這對裝飾器[回答](http://stackoverflow.com/a/1594484/1672128)可能有所幫助。閱讀它,就像你需要知道的關於裝飾器的一切。 –