Pythonでは、None
の判定にif not
とif is None
のどちらを使用するべきかは、しばしば混乱の元となります。この記事では、それぞれの違いと適切な使用法について解説します。
Noneとは
まず、PythonにおけるNone
とは、「値が存在しない状態」のことを表す組み込み定数です。他のプログラミング言語ではデータが存在しない場合は「null」という語句を使うこともあります。
Noneの判定方法
Pythonにおける処理のときには、Noneオブジェクトを使うとエラーが生じる場合もあります。そのために、処理を行う前にNoneかどうかを確認する必要が生じてきます。Noneを確認するためには、if文とis演算子を使います。
if オブジェクト is None:
# Noneだった場合の処理
else:
# Noneでない場合の処理
isと==の違い
Pythonでは、==
はオブジェクトの値同士が同じであるか(同値性)を比較し、is
はオブジェクト自体が同じものであるか(同一性)を比較します。Noneかどうかを判定したい場合は、判定の厳密性や処理速度の面からis
の使用が推奨されます。
まとめ
PythonでNoneの判定を行う際は、if not
とif is None
のどちらを使用するべきかは、その目的によります。None
のようなシングルトンと比較をする場合は、常にis
かis not
を使うべきです。また、本当はif x is not None
と書いているつもりで、if x
と書いている場合は注意してください。