2

重複の可能性:
Pythonはstringとintをどのように比較しますか?

2つの値を期待どおりに評価していなかったPythonスクリプトがありました。値'10'は。より大きいと判断されまし200た。問題は、「10」の値を保持する変数が実際には整数ではなく文字列であったことでした(整数200でした)。

私の質問は:

整数に対して文字列を評価するときにPythonが通過するプロセスは何ですか?どのように比較しますか?

例えば:

string="10"
int=200
if string >= int:
  print("String is greater")
else:
  print("Int is greater")

出力します:

String is greater

どうしてこれなの?2つのタイプを比較しようとすると、Pythonはエラーで終了するだけだと思いました。

4

3 に答える 3

5

Python 2.xでは、あらゆるタイプのオブジェクトを比較でき、結果が再現可能であることを保証します。Python 3.xでは、意味のある順序付けができないオブジェクトを比較すると、エラーが発生します。list.sort()2.xの動作の理論的根拠は、異種のリストを作成できると便利な場合があるということでした。新しい3.xの動作の理論的根拠は、古い動作がエラーを隠していたことです。

Python 2.xで使用される順序は、実装の詳細です。CPythonは、おおまかに言って、かなり奇妙なルールを使用しています

NoneType<番号<名前順に並べられた古いスタイルのクラス<名前順に並べられた新しいスタイルのクラス

(これが正しいことを保証するものではありませんが、わざわざ確認することはありません。これは実装の詳細であり、信頼しないでください。)

于 2012-07-26T16:54:45.643 に答える
4

Python 3ではTypeError、文字列とint(または2つの比較できない型)を比較しようとすると、が発生します。

Python 2では、動作は実装固有です。cPythonでは、通常、型の名前が比較されることになります(ただし、おそらくこれに依存するべきではありません...)。したがって、文字列は常に整数よりも大きくなります。

于 2012-07-26T16:54:06.847 に答える
2

ドキュメントから

演算子<、>、==、> =、<=、および!=は、2つのオブジェクトの値を比較します。オブジェクトは同じタイプである必要はありません。両方が数値の場合、それらは共通のタイプに変換されます。それ以外の場合、異なるタイプのオブジェクトは常に等しくなく、一貫して、しかし任意に順序付けられます。

于 2012-07-26T16:54:39.173 に答える