Pythonでは値がないことはNoneオブジェクトで表現される。ある変数の値がNoneかどうかを調べる方法やその際の注意点を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
a = None
if a is None: # PEP 8で推奨されている
print('a is None')
else:
print('a is not None')
if a == None: # PEP 8で推奨されていない
print('a == None')
else:
print('a != None')
if not a is None: # PEP 8では可読性の観点から推奨されていない
print('a is not None')
else:
print('a is None')
def foo(x=None):
if x: # 「if x is not None」のつもり
print(x)
else:
print('not assigned')
foo() # not assigned
foo('bar') # bar
def foo(x=None):
if x is not None: # デフォルト引数値が上書きされたかどうかをチェック
print('assigned')
else:
print('not assigned')
foo('') # assigned
foo() # not assigned
Pythonでは「値がない」ことを明示するのにNoneオブジェクトを使用する。NoneはNoneTypeクラスの唯一のインスタンスとなっている(シングルトン)。
Pythonコードの様式のガイダンスとして有名なPEP 8では、ある変数の値がNoneであるかどうかを調べるときには、等価性を比較する「==」や「!=」ではなく、「is」か「is not」を使用することが強く推奨されている。これはNoneはシングルトンであるために、ある値がNoneであるかどうかを調べるには同一性の比較を行うだけで十分だからである。
a = None
if a is None: # PEP 8で推奨されている
print('a is None')
else:
print('a is not None')
if a == None: # PEP 8で推奨されていない
print('a == None')
else:
print('a != None')
値がNoneでないことを確認したいときには次のような書き方もできる(notの位置が異なっている点に注意)。
if not a is None: # PEP 8では可読性の観点から推奨されていない
print('a is not None')
else:
print('a is None')
これは可読性の観点から推奨されておらず、「if a is not None」のような書き方をすることが推奨されている。
Copyright© Digital Advantage Corp. All Rights Reserved.