Python 2で ''> 0がTrueになるのはなぜですか?

parxier:

Python 2.xの場合:

>>> '' > 0
True

何故ですか?

Alex Martelli:

任意のオブジェクトの順序比較を可能にする当初の設計の動機は、異種リストの並べ替えを可能にすることでした-便利なことに、すべての文字列をアルファベット順に並べ、すべての数値を番号順に並べますが、最初に来た2つのブロックは、言語によって保証されていませんでした。たとえば、これにより、O(N log N)最悪の場合、リスト内の一意のアイテムのみ(ハッシュ可能でないアイテムを含むものでも)のみを取得できました。

長年にわたって、この実用的な取り決めは侵食されました。最初の亀裂は、かなり数バージョン前に、複素数を順序比較する機能がなくなったときに起こりました。突然、ソートする機能任意のリストが消えた:リストは複素数が含まれている場合、それはおそらく一緒に、他の種類の項目と、これ以上は適用されませんでした。その後、Guidoは異種のリストをより一般的に嫌いになり、そのようなリストが最初から存在していてはならないため、そのようなリストをソートできるかどうか重要ではないと考え始めました。彼はそれらを禁止するために何もしませんでしたが、それらをサポートするために妥協を受け入れる傾向もありませんでした。

どちらの変更も、バランスを少し動かして、Zen of Pythonの「実用性が純粋さを打ち負かす」項目(これは以前に記述され、複素数をまだ順序比較できる場合に戻って;-) から少し離れています。少し実用性が低い。

それにも関わらず、注文比較同時にグイドは本当に強い後方互換性を維持することを主張し始めたの周りのことをするので、限り、どちらも複素数;-)長い間残ってなかったとして(2つの任意のオブジェクトを(シフトする能力だという両方の実用的かつ純粋;-)。

したがって、それは強力な後方互換性の制約を明示的かつ故意に削除して、いくつかの長期的に望まれているが後方互換性のない拡張機能(特に、特定のタスクを実行するための古い、冗長な方法の簡素化と削除)、インスタンスの順序比較を可能にするPython 3でのみです異なるタイプのエラーが発生しました。

したがって、この歴史的および哲学的な論文は、基本的に「なぜ」の質問に真に応答する唯一の方法です...!:-)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python 3でrange(0)== range(2、2、2)がTrueになるのはなぜですか?

分類Dev

このPythonが常にTrueになるのはなぜですか?

分類Dev

True / FalseがPythonで大文字になっているのはなぜですか?

分類Dev

Pythonで「True == not False」が構文エラーになるのはなぜですか?

分類Dev

Pythonで「0、0 ==(0、0)」が「(0、False)」に等しいのはなぜですか?

分類Dev

Pythonで `(True、True、True)== True、True、True`がTrueではないのはなぜですか?

分類Dev

Python:値が常に0を返すのはなぜですか

分類Dev

Pythonの「if(x)」が「if(x == True)」と異なるのはなぜですか?

分類Dev

Pythonでbool( "0")が真であるのはなぜですか?なぜこれが起こるのですか?

分類Dev

Python 3で... == TrueがFalseを返すのはなぜですか?

分類Dev

Python:(「hello」は「hello」)がTrueと評価されるのはなぜですか?

分類Dev

Python / Numpyでブール値としてキャストすると、「数値ではない」値がTrueになるのはなぜですか?

分類Dev

Python 3で000が0と評価されるのはなぜですか?

分類Dev

django2がpython2で利用できるのはなぜですか?

分類Dev

Pythonで式0 <0 == 0がFalseを返すのはなぜですか?

分類Dev

Python 3.7でint(x-1)== xがいくつかの値のxでTrueになるのはなぜですか?

分類Dev

〜Trueが-2になるのはなぜですか?

分類Dev

操作2 ** 2 ** 2 ** 2 ** 2 ** 2によってPythonがハングするのはなぜですか?

分類Dev

変数が0になったときにwhileループが停止しないのはなぜですか?(Python)

分類Dev

Python出力の先頭にhexdumpが0aを表示するのはなぜですか?

分類Dev

Pythonの辞書のキーが同じになるのはなぜですか?

分類Dev

SwiftとPythonでFFTが異なるのはなぜですか?

分類Dev

なぜ `True is False == False`、PythonではFalseなのですか?

分類Dev

Pythonのsubprocess.check_outputが機能するために、ここでshell = Trueが必要なのはなぜですか?

分類Dev

浮動小数点数を丸めるときにPythonが0を返すのはなぜですか?

分類Dev

Pythonの__import__にfromlistが必要なのはなぜですか?

分類Dev

属性が存在するのにPythonがAttributeErrorを出すのはなぜですか

分類Dev

属性が存在するのにPythonがAttributeErrorを出すのはなぜですか

分類Dev

Pythonでメインプロセスが終了するときに子プロセス(daemon = True)が終了しないのはなぜですか?

Related 関連記事

  1. 1

    Python 3でrange(0)== range(2、2、2)がTrueになるのはなぜですか?

  2. 2

    このPythonが常にTrueになるのはなぜですか?

  3. 3

    True / FalseがPythonで大文字になっているのはなぜですか?

  4. 4

    Pythonで「True == not False」が構文エラーになるのはなぜですか?

  5. 5

    Pythonで「0、0 ==(0、0)」が「(0、False)」に等しいのはなぜですか?

  6. 6

    Pythonで `(True、True、True)== True、True、True`がTrueではないのはなぜですか?

  7. 7

    Python:値が常に0を返すのはなぜですか

  8. 8

    Pythonの「if(x)」が「if(x == True)」と異なるのはなぜですか?

  9. 9

    Pythonでbool( "0")が真であるのはなぜですか?なぜこれが起こるのですか?

  10. 10

    Python 3で... == TrueがFalseを返すのはなぜですか?

  11. 11

    Python:(「hello」は「hello」)がTrueと評価されるのはなぜですか?

  12. 12

    Python / Numpyでブール値としてキャストすると、「数値ではない」値がTrueになるのはなぜですか?

  13. 13

    Python 3で000が0と評価されるのはなぜですか?

  14. 14

    django2がpython2で利用できるのはなぜですか?

  15. 15

    Pythonで式0 <0 == 0がFalseを返すのはなぜですか?

  16. 16

    Python 3.7でint(x-1)== xがいくつかの値のxでTrueになるのはなぜですか?

  17. 17

    〜Trueが-2になるのはなぜですか?

  18. 18

    操作2 ** 2 ** 2 ** 2 ** 2 ** 2によってPythonがハングするのはなぜですか?

  19. 19

    変数が0になったときにwhileループが停止しないのはなぜですか?(Python)

  20. 20

    Python出力の先頭にhexdumpが0aを表示するのはなぜですか?

  21. 21

    Pythonの辞書のキーが同じになるのはなぜですか?

  22. 22

    SwiftとPythonでFFTが異なるのはなぜですか?

  23. 23

    なぜ `True is False == False`、PythonではFalseなのですか?

  24. 24

    Pythonのsubprocess.check_outputが機能するために、ここでshell = Trueが必要なのはなぜですか?

  25. 25

    浮動小数点数を丸めるときにPythonが0を返すのはなぜですか?

  26. 26

    Pythonの__import__にfromlistが必要なのはなぜですか?

  27. 27

    属性が存在するのにPythonがAttributeErrorを出すのはなぜですか

  28. 28

    属性が存在するのにPythonがAttributeErrorを出すのはなぜですか

  29. 29

    Pythonでメインプロセスが終了するときに子プロセス(daemon = True)が終了しないのはなぜですか?

ホットタグ

アーカイブ