Python 2.xの場合:
>>> '' > 0
True
何故ですか?
任意のオブジェクトの順序比較を可能にする当初の設計の動機は、異種リストの並べ替えを可能にすることでした-便利なことに、すべての文字列をアルファベット順に並べ、すべての数値を番号順に並べますが、最初に来た2つのブロックは、言語によって保証されていませんでした。たとえば、これにより、O(N log N)
最悪の場合、リスト内の一意のアイテムのみ(ハッシュ可能でないアイテムを含むものでも)のみを取得できました。
長年にわたって、この実用的な取り決めは侵食されました。最初の亀裂は、かなり数バージョン前に、複素数を順序比較する機能がなくなったときに起こりました。突然、ソートする機能任意のリストが消えた:リストは複素数が含まれている場合、それはおそらく一緒に、他の種類の項目と、これ以上は適用されませんでした。その後、Guidoは異種のリストをより一般的に嫌いになり、そのようなリストが最初から存在していてはならないため、そのようなリストをソートできるかどうかは重要ではないと考え始めました。彼はそれらを禁止するために何もしませんでしたが、それらをサポートするために妥協を受け入れる傾向もありませんでした。
どちらの変更も、バランスを少し動かして、Zen of Pythonの「実用性が純粋さを打ち負かす」項目(これは以前に記述され、複素数をまだ順序比較できる場合に戻って;-) から少し離れています。少し実用性が低い。
それにも関わらず、注文比較同時にグイドは本当に強い後方互換性を維持することを主張し始めたの周りのことをするので、限り、どちらも複素数;-)長い間残ってなかったとして(2つの任意のオブジェクトを(シフトする能力だという両方の実用的かつ純粋;-)。
したがって、それは強力な後方互換性の制約を明示的かつ故意に削除して、いくつかの長期的に望まれているが後方互換性のない拡張機能(特に、特定のタスクを実行するための古い、冗長な方法の簡素化と削除)、インスタンスの順序比較を可能にするPython 3でのみです異なるタイプのエラーが発生しました。
したがって、この歴史的および哲学的な論文は、基本的に「なぜ」の質問に真に応答する唯一の方法です...!:-)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加