我有一個 Python 字典 bag={fruit:'apple',vegetable:'kale'}
和一個輔助函式,它在執行查詢中看到水果和蔬菜這兩個詞時,它將分別替換為蘋果和羽衣甘藍。
輔助功能:
def replaceQuery(self,query,**basket):
for key , value in basket.items():
if key in query:
query=query.replace(key,value)
return query
接下來,我使用從該方法回傳的查詢并將其傳遞給執行方法
query =replaceQuery(query,basket)
executeQuery(Client, query)
執行方法如下:
def executeQuery(Client,query):
result=Client.query(query)
我一直在學習裝飾器,想知道是否可以在 executeQuery() 方法上添加裝飾器,以便每次呼叫它時,它都會首先替換 Query 字串以替換所有水果和蔬菜值。類似于此的東西
@replaceQuery
def executeQuery(Client,query)
......
......
在此程序中添加裝飾器的任何幫助或建議都會有所幫助
uj5u.com熱心網友回復:
您可以使用裝飾器實作相同的功能,如下面的示例所示
def replaceQuery(decorated):
@wraps(decorated)
def replace(Client, query, basket):
# code to run before the decorated func
for key , value in basket.items():
if key in query:
query=query.replace(key,value)
# running the decorated func
return decorated(Client, query, basket)
return replace
@replaceQuery
def executeQuery(Client, query, basket):
......
......
在 Python 函式中,就像任何其他物件一樣,通過在 executeQuery 函式中添加 @replaceQuery 裝飾器,您實際上使用 executeQuery replaceQuery(executeQuery) 呼叫 replaceQuery,因此裝飾物件是指 executeQuery func。運行executeQuery()時會呼叫replace(),因此您可以在replace func中運行裝飾函式(executeQuery)之前添加要執行的功能,然后呼叫executeQuery。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312282.html
