Python None 比較: "is" と == のどちらを使うべきですか? 質問する

Python None 比較:

私のエディターは、 を比較するときには警告を表示しますmy_var == Noneが、 を使用するときには警告を表示しませんmy_var is None

Python シェルでテストを実行し、どちらも有効な構文であることを確認しましたが、エディターではそれがmy_var is None優先されると表示されているようです。

これは事実でしょうか、もしそうなら、それはなぜでしょうか?

ベストアンサー1

まとめ:

isオブジェクトのIDをチェックする場合に使用します(例:varかどうかを確認するNone)。等価性==をチェックする場合に使用します(例:と等しいか?)。var3

説明:

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

おすすめ記事