有幾種不同的方法來檢查,如果一個Python字典包含特定鍵,即檢查Python字典的特定鍵
d = {}
if key in d:
if d.contains(key):
if d.has_key(key):
這是愚蠢的語言,讓你做同樣的事情幾種不同的方式,除非每種方法都做了完全不同的事情。有人可以對比以上三種技術,它們有什麼不同?
有幾種不同的方法來檢查,如果一個Python字典包含特定鍵,即檢查Python字典的特定鍵
d = {}
if key in d:
if d.contains(key):
if d.has_key(key):
這是愚蠢的語言,讓你做同樣的事情幾種不同的方式,除非每種方法都做了完全不同的事情。有人可以對比以上三種技術,它們有什麼不同?
d.__contains__(key)
是用什麼key in d
(因爲in
操作者調用詞典__contains__
法)
has_key
已被棄用,不一樣__contains__
他們都是一樣的,他們都是由於歷史原因,但你should usekey in d
。
我不認爲'__contains__'是因爲歷史原因而「變動」的嗎?它不像它會很快被棄用... –
也許你想進一步闡述爲了querent的好處嗎? –
當然...我添加了一個答案。 –
方法#1是可接受的方式。方法#2實際上並不存在,至少在我知道的任何Python版本中都是如此;我很想看看你在哪裏找到的。方法#3曾經是被接受的方式,但現在是deprecated。
所以真的只有一種方法。
也許他正在考慮'__contains__' – Gerrat
只是爲了回答這個問題......如果他*想着'__contains__' - 答案是這是一種特殊的方法來實現'b在一個'... vm將a引用中的任何'b轉換爲對'a .__包含__(b)'後面的調用,很像'a [b]'被轉換爲'a .__ getitem __(b)'。特殊的'__xxx__'方法是python如何爲語言公開提供的所有語法糖提供一個乾淨的基於方法的實現。 –
key in d
是接受的方式做到這一點。
__contains__
是實現上述語法的魔術屬性(ref)。大多數(如果不是全部的話)特殊語法通過這些方法來實現。例如,with
聲明是通過__enter__
和__exit__
實現的。存在這種方法允許爲用戶定義的類提供特殊的功能。
的has_key
方法不再在Python 3存在,並且在Python已棄用2.
注意到Python並沒有真正的私有方法... – NullUserException
@NullUserException:謝謝,我查了一下它的正確名稱。 –
從未見過d.contains(),是新的? – steabert
@steabert:可能應該是'__contains__' – Gerrat
啊,謝謝,沒有想到這個,我傾向於保持清楚:) – steabert