Python組み込みデータタイプNone
以外にありますか?
>>> not foo > None
True
ここで、foo
はそのタイプの値ですか? Python 3?
None
は常にPython 2のデータ型よりも小さくなります( object.c
を参照)。
Python 3で、これは変更されました。現在、合理的な自然順序付けなしで物事を比較すると、TypeError
になります。- .0「新着情報」の更新:
Python 3.0では、比較の順序付けのルールが簡略化されています。
順序付け比較演算子(
<
、<=
、>=
、>
)は、オペランドに意味のある自然な順序付けがない場合、TypeError
例外を発生させます。したがって、1 < ''
、0 > None
、len <= len
などの式は無効になりました。None < None
はTypeError
を返す代わりにFalse
をレイズします。当然の結果として、異種混合リストのソートはもはや意味がありません。すべての要素は互いに比較可能でなければなりません。これは==
演算子と!=
演算子には適用されないことに注意してください。比較できないタイプのオブジェクトは常に互いに等しくありません。
一部のNone
値が含まれているリストを並べ替え、None
値が最初または最後にクラスター化されているように表示することが便利なため、これは一部の人々を混乱させました。 これについてメーリングリストにスレッドがありましたしばらく前に、しかし最終的なポイントはPython 3は、順序付けに関する恣意的な決定を回避しようとします(これは、Python 2で頻繁に発生したことです)。
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 [〜#〜]:バージョン番号を追加しました。