Python 2.xを使用しています。
エディターはmy_var == None
を比較すると警告しますが、my_var is None
を使用すると警告は表示されません。
Pythonシェルでテストを行い、両方とも有効な構文であると判断しましたが、私のエディターはmy_var is None
が推奨されていると言っているようです。
これは事実ですか?もしそうなら、なぜですか?
オブジェクトのidentity(たとえば、is
がvar
であるかどうかを確認する)をチェックする場合は、None
を使用します。 equalityを確認する場合は==
を使用します(例: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
はオブジェクトをチェックしますidentity。オブジェクトはNone
が1つしかないため、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
PEP 8では、シングルトンを比較するときにis
演算子を使用する方が良いと定義されています。