簡體   English   中英

在非數字Python對象上進行順序比較的邏輯是什么?

[英]What is the logic behind order comparison on non-numeric Python objects

為什么123 < list評估為True list < 123False 或者list < dict to True

更一般地說,當一個數字與一個函數,一個列表或類似的東西相比時, <>不會引發錯誤? 這種設計選擇背后的邏輯是什么?

(請注意,這是在Python 2.7中,在Python 3中可能不是這樣,我還沒有嘗試過)

在Python2中, 文檔說

CPython實現細節:除了數字之外的不同類型的對象按其類型名稱排序; 不支持正確比較的相同類型的對象按其地址排序。

在Python3中, 這個疣是固定的

當操作數沒有有意義的自然順序時,排序比較運算符(<,<=,> =,>)會引發TypeError異常。 因此,像1 <'',0> None或len <= len這樣的表達式不再有效,例如None <None引發TypeError而不是返回False。 一個必然結果是,對異構列表進行排序不再有意義 - 所有元素必須相互比較。 請注意,這不適用於==和!=運算符:不同無比類型的對象總是相互比較不相等。

在這種情況下的比較是在對象的type()的基礎上完成的:

例如: type(123)'int'type(list)'list' ,所以'int'<'list'的字符串比較返回True

>>> 123<list
True
>>> type(123)<type(list)
True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM