75

以外Noneに、Python 組み込みデータ型はありますか?

>>> not foo > None
True

fooその型の値はどこにありますか? Python3はどうですか?

4

2 に答える 2

95

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

Python 3 では、これが変更されました。賢明な自然な順序付けなしで物事を比較すると、TypeError. 3.0 の「新機能」の更新から:

Python 3.0 では、比較の順序付けのルールが簡素化されました。

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

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

于 2010-02-06T18:38:29.877 に答える
30

Python 2.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;
    ...
}

編集:バージョン番号を追加しました。

于 2010-02-06T18:40:12.903 に答える