[解決!Python]変数の値などがNoneであるかどうかを判定するには解決!Python

Pythonでは値がないことはNoneオブジェクトで表現される。ある変数の値がNoneかどうかを調べる方法やその際の注意点を紹介する。

» 2023年08月01日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

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


Noneオブジェクト

 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。