2017-10-14 105 views
0

我有以下功能:如何檢查是否kwarg等於一個特定值

def find_data(**data): 
    if data == 'price': 
     ## do something 
     print 'yes' 

但是當我打電話下面沒有任何的功能發生了:

find_data(data='price') 

我的預期輸出當數據=價格時(例如,對於數據=關閉),使該功能執行操作。我想知道是否有更pythonic,更短的方式然後:

def find_data(**data): 
    for k, v in data.items(): 
     if v == 'price': 
      print 'yes' 
+0

'如果數據[「數據」] ==「價格」'會工作 –

+0

這是否被認爲是標準做法? (謝謝,我喜歡它的簡潔) –

+2

@ thomas.mac成語(標準練習)是將變量命名爲kwargs'kwargs',然後將其用作字典。這是它的目的。 – zxq9

回答

2

你想引用kwargs作爲一個字典。

地道:

​​

作爲增編...這是好事,記住,你越瞭解進入一個功能少狂發的參數你的代碼往往會隨着時間的推移增長(也就是說,越少代碼的多態性和可變性越清晰,代碼的語義也會隨着時間的推移而變化)。因此,仔細考慮是否真的需要傳遞「只是一些隨機關鍵字參數」,或者您應該接受一個特定形狀的字典作爲單個參數或者可能接收該特定值作爲顯式自己的論點。

1

你在混合關鍵字參數與參數字典。

find_data,data是關鍵字參數字典(不正確的名稱,因爲它通常被稱爲kwargs)。比較data到一個字符串不起作用(不是相同的類型)。你想:

def find_data(**data): 
    if data["data"] == 'price': 
     ## do something 
     print('yes') 

find_data(data="price") 
+0

爲什麼downvote ?沒有正確解釋? –

+0

是的,我不知道downvote - 因爲從技術上講你是對的。但是可能再次,也許它是因爲Python中的一些變量按照慣例具有標準名稱,比如'self','args'和'kwargs'。 ? – zxq9

+0

是的,我解釋了混亂。我的解釋可能很笨拙。 downvote來自蟒蛇DV警察:hi-rep用戶回答「微不足道」的問題並不完美,因爲它應該。好吧,請給他們看。 –

相關問題