2013-03-02 121 views
0

最近我驚訝地發現,你可以在Python中取得不同類型的參數min(),並且不會得到ValueError。Python min()不同類型的參數

min(3, "blah") ==> 3 
min(300, 'zzz') ==> 300 

這個文檔還不清楚 - 它只是說min()取「最小的參數」。它如何確定哪個元素是最小的?

回答

0

在Python 2中,存在任意但可預測的值與不同類型的比較。我認爲這是類似名稱的字典對比的東西(整數<浮點數< strs <元組)。

1

它通過使用通常的規則比較它們來確定這一點。如果對象是不同的類型,並且不能進行明智的比較(因爲它們都不實現所需的特殊方法,或者實現不與另一個對象的類型一起工作),那麼它們按類型被賦予一致的順序;例如,所有整數都小於全部字符串。試試看:1 < "1"

(順便說一句,布爾值作爲整數的子類實現,並且可以用數字來比較,所以他們會爲您解決False爲0,True爲1)

有人實施這樣,如果你排序一個包含各種類型的列表,就像類型一起排序。然而,在Python 3中,這已經改變了,你不能再隱式地比較不同類型。

0

它根據排序的Python的定義是正確的:

>>> 3 < "blah" 
True 
>>> 300 < 'zzz' 
True 

rule是:

如果兩個都是數字,它們將轉換爲一個共同的類型。否則,不同類型的對象總是比較不平等,並且被一致但任意地排序。