3

123 < listが評価されるのはなぜTrueですか? それとも?list < 123_ Falseそれとも?list < dict_True

より一般的には、数値が関数やリストなどと比較されたときにエラーが発生するのはなぜ<ですか? >このデザインの選択の背後にあるロジックは何ですか?

(これは Python 2.7 にあることに注意してください。まだ試していない Python 3 には当てはまらない可能性があります)

4

2 に答える 2

3

Python2では、ドキュメントには次のように書かれています

CPython 実装の詳細: 数値以外の異なる型のオブジェクトは、型名によって並べ替えられます。適切な比較をサポートしない同じタイプのオブジェクトは、アドレス順に並べられます。

Python3 では、この疣贅は修正されています。

順序比較演算子 (<、<=、>=、>) は、オペランドに意味のある自然順序付けがない場合、TypeError 例外を発生させます。したがって、1 < '', 0 > None または len <= len のような式はもはや有効ではなく、たとえば None < None は False を返す代わりに TypeError を発生させます。当然のことながら、異種のリストをソートすることはもはや意味がありません。すべての要素が互いに比較可能でなければなりません。これは == および != 演算子には適用されないことに注意してください: 異なる比較不可能な型のオブジェクトは、常に互いに比較して等しくありません。

于 2012-10-29T21:11:58.737 に答える
1

このような場合の比較はtype()、オブジェクトに基づいて行われます。

たとえば、:type(123)is'int'type(list)isであるため、 returns'list'の文字列比較は'int'<'list'True

>>> 123<list
True
>>> type(123)<type(list)
True
于 2012-10-29T21:09:06.103 に答える