私が書いていた Python スクリプトがおかしな動作をしていることに気が付き、無限ループにたどり着きました。ループ条件は でしたwhile line is not ''
。デバッガーでその行を実行すると、実際には であることがわかりました。 をに''
変更すると、正常に動作しました。!=''
is not ''
また、int 値や Boolean 値を比較する場合でも、デフォルトで '==' を使用する方が一般的に優れていると考えられていますか? 私は、見た目も美しく、Python らしいと感じたため、常に 'is' を使用することを好んできました (それがこの罠に陥った理由です...)。しかし、これは同じ ID を持つ 2 つのオブジェクトを見つけることに関心がある場合のみに予約されていることを意図しているのではないかと思います。
ベストアンサー1
すべての組み込み Python オブジェクト (文字列、リスト、辞書、関数など) では、x が y の場合、x==y も True になります。
常にそうとは限りません。NaN は反例です。しかし、通常は、同一性 ( is
) は等価性 ( ==
) を意味します。逆は真ではありません。2 つの異なるオブジェクトが同じ値を持つ場合があります。
また、int 値またはブール値を比較する場合でも、デフォルトで '==' を使用する方が一般的に良いと考えられていますか?
==
値を比較するときやID を比較するときに使用しますis
。
int (または一般的な不変型) を比較する場合、ほとんどの場合、前者を使用します。小さな整数を と比較できるようにする最適化がありますis
が、これに頼らないでください。
ブール値の場合は、比較をまったく行わないでください。代わりに、次のようになります。
if x == True:
# do something
書く:
if x:
# do something
と比較する場合None
、is None
よりも が優先されます== None
。
私はいつも「is」を使うのが好きです。見た目も美しく、Python らしいからです (それがこの罠に陥った理由です...)。しかし、これは同じ ID を持つ 2 つのオブジェクトを見つけることに関心がある場合にのみ使用するように意図されているのではないかと思います。
はい、まさにそのためのものです。