最近我驚訝地發現,你可以在Python中取得不同類型的參數min(),並且不會得到ValueError。Python min()不同類型的參數
min(3, "blah") ==> 3
min(300, 'zzz') ==> 300
這個文檔還不清楚 - 它只是說min()取「最小的參數」。它如何確定哪個元素是最小的?
最近我驚訝地發現,你可以在Python中取得不同類型的參數min(),並且不會得到ValueError。Python min()不同類型的參數
min(3, "blah") ==> 3
min(300, 'zzz') ==> 300
這個文檔還不清楚 - 它只是說min()取「最小的參數」。它如何確定哪個元素是最小的?
在Python 2中,存在任意但可預測的值與不同類型的比較。我認爲這是類似名稱的字典對比的東西(整數<浮點數< strs <元組)。
它通過使用通常的規則比較它們來確定這一點。如果對象是不同的類型,並且不能進行明智的比較(因爲它們都不實現所需的特殊方法,或者實現不與另一個對象的類型一起工作),那麼它們按類型被賦予一致的順序;例如,所有整數都小於全部字符串。試試看:1 < "1"
(順便說一句,布爾值作爲整數的子類實現,並且可以用數字來比較,所以他們會爲您解決False
爲0,True
爲1)
有人實施這樣,如果你排序一個包含各種類型的列表,就像類型一起排序。然而,在Python 3中,這已經改變了,你不能再隱式地比較不同類型。
它根據排序的Python的定義是正確的:
>>> 3 < "blah"
True
>>> 300 < 'zzz'
True
的rule是:
如果兩個都是數字,它們將轉換爲一個共同的類型。否則,不同類型的對象總是比較不平等,並且被一致但任意地排序。