我只注意到Python允許你爲一個字符串值與一些比較:爲什麼一個字符串總是「大於」一個數字?
>>> '10' > 1000
True
>>> 'a' > 1000
True
>>> 'a' > -1000
True
爲什麼任何字符串總是比任何數量更大?
我只注意到Python允許你爲一個字符串值與一些比較:爲什麼一個字符串總是「大於」一個數字?
>>> '10' > 1000
True
>>> 'a' > 1000
True
>>> 'a' > -1000
True
爲什麼任何字符串總是比任何數量更大?
在Python 2,§5.3 - Comparisons說:
對象不同的類型,除了不同的數值類型和不同的串類型,從未比較相等; 這樣的對象被一致但是任意地排序(以便對異類陣列進行排序得到一致的結果)。此外,某些類型(例如,文件對象)僅支持簡單的比較概念,其中任何兩個類型的對象都不相等。再次,這樣的對象是任意排列但一致的。當任何操作數是複數時,
<
,<=
,>
和>=
運算符將引發TypeError異常。
在Python 3,§4.3 - Comparisons表示:
對象不同的類型,除了不同的數字類型,從未比較相等。此外,某些類型(例如函數對象)僅支持簡單的比較概念,即任何兩種類型的對象都不相等。 比較與另一內置數字型,當對象是不同的類型,而且不能進行比較,或在其它情況下,其中有一個複數時
<
,<=
,>
和>=
運營商將提高TypeError異常沒有定義的順序。
下面也可能值得添加「CPython實現細節」,這就解釋了爲什麼他看到特定的「一致但任意」排序。 (雖然它不是100%完整的;它並沒有解釋「無」總是小於其他任何東西,而數字類型總是比任何非「無」或「數字」意味着什麼,或規則用於處理內置數值類型的病態子類,或者......但唯一的地方是你可以在源代碼中找到更多解釋。) – abarnert
您正在比較兩種不具有任何有意義的比較的類型,所以我認爲這取決於解釋器的實現。 – Santa
如果你問「Python爲什麼選擇這個規則」而不是「規則是什麼」,[Alex Martelli的回答](http://stackoverflow.com/a/2384139/908494)關於另一個問題的重複可能是你在找什麼。 – abarnert
@abarnert關於爲什麼會這樣,以及爲什麼這會在Python 3中引發一個錯誤的良好解釋,謝謝。 –