1. ホーム
  2. パイソン

[解決済み】PythonのNone比較:"is "と==のどちらを使うべきですか?

2022-04-19 03:34:36

質問

を比較すると、エディタから警告が表示されます。 my_var == None を使用すると警告が出ますが my_var is None .

Pythonのシェルでテストしたところ、どちらも有効な構文であることがわかりましたが、エディターが言うには my_var is None の方が好ましいと思います。

また、その理由は何ですか?

解決方法は?

概要

使用方法 is に対してチェックを行いたい場合、オブジェクトの アイデンティティ (例) varNone ). 使用方法 == を確認したい場合 等しい (例) var と等しい 3 ?).

説明します。

カスタムクラスを持つことができます。 my_var == None を返します。 True

class Negator(object):
    def __eq__(self,other):
        return not other

thing = Negator()
print thing == None    #True
print thing is None    #False

is オブジェクトをチェックする アイデンティティ . オブジェクトは1つだけです。 None を実行すると my_var is None でなく)、実際に同じオブジェクトであるかどうかをチェックしているのです。 等価 オブジェクト)

言い換えれば == は等価性のチェック(これはオブジェクトごとに定義される)であるのに対し is は、オブジェクトの同一性をチェックします。

lst = [1,2,3]
lst == lst[:]  # This is True since the lists are "equivalent"
lst is lst[:]  # This is False since they're actually different objects