web-dev-qa-db-ja.com

すべてがなしよりも大きいですか?

Python組み込みデータタイプNone以外にありますか?

>>> not foo > None
True

ここで、fooはそのタイプの値ですか? Python 3?

70
Attila O.

Noneは常にPython 2のデータ型よりも小さくなります( object.c を参照)。

Python 3で、これは変更されました。現在、合理的な自然順序付けなしで物事を比較すると、TypeErrorになります。- .0「新着情報」の更新

Python 3.0では、比較の順序付けのルールが簡略化されています。

順序付け比較演算子(<<=>=>)は、オペランドに意味のある自然な順序付けがない場合、TypeError例外を発生させます。したがって、1 < ''0 > Nonelen <= lenなどの式は無効になりました。 None < NoneTypeErrorを返す代わりにFalseをレイズします。当然の結果として、異種混合リストのソートはもはや意味がありません。すべての要素は互いに比較可能でなければなりません。これは==演算子と!=演算子には適用されないことに注意してください。比較できないタイプのオブジェクトは常に互いに等しくありません。

一部のNone値が含まれているリストを並べ替え、None値が最初または最後にクラスター化されているように表示することが便利なため、これは一部の人々を混乱させました。 これについてメーリングリストにスレッドがありましたしばらく前に、しかし最終的なポイントはPython 3は、順序付けに関する恣意的な決定を回避しようとします(これは、Python 2で頻繁に発生したことです)。

78
John Feminella

Python2.7.5ソースから( object.c ):

static int
default_3way_compare(PyObject *v, PyObject *w)
{
    ...
    /* None is smaller than anything */
    if (v == Py_None)
            return -1;
    if (w == Py_None)
            return 1;
    ...
}

[〜#〜] edit [〜#〜]:バージョン番号を追加しました。

28
Torsten Marek