Pythonでは、None
の判定にis
と==
のどちらを使うべきかという疑問がよく出ます。この記事では、その違いと各々の使用場面について解説します。
None
とは
まず、PythonにおけるNone
とは、「値が存在しない状態」のことを表す組み込み定数です。他のプログラミング言語ではデータが存在しない場合は「null」という語句を使うこともあります。
is
と==
の違い
Pythonでは、==
はオブジェクトの値同士が同じであるか(同値性)を比較し、is
はオブジェクト自体が同じものであるか(同一性)を比較します。
例えば、以下のような同じ中身のリストがあります。
list1 = [1, 2, 3]
list2 = [1, 2, 3]
同じ中身の2つのリストに対して、==
とis
でそれぞれ2つのリストを比較します。
print(list1 == list2) # True
print(list1 is list2) # False
==
では、2つのリストの要素がまったく同じであるため、Trueが返されます。一方で中身が同じでもlist1
, list2
という別のオブジェクトであるため、is
で判定した場合はFalseになります。
None
の判定
Pythonにおける処理のときには、None
オブジェクトを使うとエラーが生じる場合もあります。そのために、処理を行う前にNone
かどうかを確認する必要が生じてきます。
None
を確認するためには、if
文とis
演算子を使います。is
演算子は2つのオブジェクトが一致しているかどうかを比較するための演算子で、次のように記述します。
if object is None:
# Noneだった場合の処理
else:
# Noneでない場合の処理
このように、何もないことを表す場合に、None
が使用されます。
まとめ
Pythonでは、None
の判定にis
を使うことが推奨されています。これは、is
がオブジェクトの同一性を比較するため、None
の判定においてはis
の使用が厳密性や処理速度の面から推奨されます。また、is
と==
の違いを理解することは、Pythonのコーディング規約を理解する上でも重要です。