1. ホーム
  2. python

[解決済み] Pythonの文字列比較:is vs == [重複]について

2022-03-17 15:38:13

質問

私が書いているPythonスクリプトの挙動がおかしいことに気づき、無限ループに行き着いたのですが、そのループの条件が while line is not '' . デバッガで実行したところ、その行は実際には '' . に変更したところ !='' よりも is not '' であれば、問題なく動作しました。

また、一般的にintやbooleanの値を比較する場合でも、デフォルトで'=='を使用した方が良いとされているのでしょうか?私はいつも'is'を使うのが好きで、その方が美的にもpythonicだと思うからです(それでこの罠にはまったのですが...)でも、同じidの2つのオブジェクトを見つけることを気にするときだけ予約するように意図されているのかな。

解決方法は?

<ブロッククオート

Pythonのすべての組み込みオブジェクト(例えば 文字列、リスト、ディクショナリ、関数。 など)、x が y ならば x==y もまた 真である。

必ずしもそうとは限りません。 NaNは反例です。 しかし 通常 同一性( is ) が等しいことを意味する ( == ). 逆は真ならず:異なる2つのオブジェクトが同じ値を持つことができる。

また、一般的にデフォルトで '==' を使用した方が良いとされています。 int値やboolean値を比較するとき?

あなたは == 値を比較するときと is は、identityを比較するときに使用します。

int 型 (または一般に immutable 型) を比較する場合、ほとんど常に前者が望まれます。 小さな整数の比較には is しかし、それに頼ってはいけない。

ブール値の場合、比較は全くしない方がいい。 代わりに

if x == True:
    # do something

を書き込む。

if x:
    # do something

との比較のため None , is None よりも優先されます。 == None .

私は昔から'is'を使うのが好きなんです。 より美的感覚に優れる とピトニック(これが私が陥ったきっかけです。 この罠にはまってしまった......)でも、どうなんだろう。 の時だけであることを意図しています。 2つのオブジェクトを見つけることに関心がある場合 が同じidの場合。

はい、まさにその通りです。