[解決!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」のような書き方をすることが推奨されている。

 真偽値の評価の観点からはNoneはFalseと見なされる。

if None:
    print(True)
else:
    print(False# こちらが実行される

 だが、ある変数の値がNoneでないことを前提とした次のようなコードを書くことは推奨されていない。

def foo(x=None):
    if x:  # 「if x is not None」のつもり
        print(x)
    else:
        print('not assigned')

foo()  # not assigned
foo('bar'# bar

 これは空文字列など、真偽値判定の場面ではFalseと見なされる値があるからだ。例えば上記のfoo関数に空文字列を渡しても「」と表示される。

foo(''# not assigned

 上のようにデフォルト引数値をNoneとして、関数呼び出し時に値が明示的に渡されたかどうかをチェックするのであれば、「is not」演算子を使うようにしよう。

def foo(x=None):
    if x is not None# デフォルト引数値が上書きされたかどうかをチェック
        print('assigned')
    else:
        print('not assigned')

foo(''# assigned
foo()  # not assigned

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

解決!Python

鬯ッ�ッ�ス�ゥ髫ー�ウ�ス�セ�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ョ�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ョ鬯ョ�ッ�ス�キ�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�エ鬯ョ�」髮具スサ�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�・�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ョ�ッ隲幢スカ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�、�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ク�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ゥ髯滂ソス迹ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス驍オ�コ�ス�、�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�エ鬯ッ�ッ�ス�ゥ髯晢スカ陞「�ス隴ッ�カ�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ョ�ス�ョ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ鬯ッ�ョ�ス�ッ髯具スケ�ス�コ�ス�ス�ス�サ驛「�ァ隰�∞�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ョ�ス�」髯具スケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ鬯ョ�ォ�ス�エ髫ー�ォ�ス�セ�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス�ス�ス�ス�ス鬮ォ�カ鬮ョ�」�ス�ス�ス�」�ス�ス陞ウ闌ィ�ス�「隰�∞�ス�ス�ス�ュ鬮ョ諛カ�ス�」�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「鬯ョ�ォ�ス�エ鬮ョ諛カ�ス�」�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�シ鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「鬯ョ�ォ�ス�エ髣包スウ�ス�サ�ス�ス�ス�ス鬮ォ�カ隰撰スコ�ス�サ郢ァ謇假スス�ス�ス�ソ�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�、�ス�ス邵コ�、�つ€鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ鬯ッ�ゥ陋ケ�ス�ス�ス�ス�カ鬮」雋サ�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス驍オ�コ�ス�、�ス縺、ツ€鬯ョ�ッ�ス�キ鬮」魃会スス�ィ�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ェ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ゥ髫ー�ウ�ス�セ�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ョ�ス�ッ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス New

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

Deep Insider 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー

髫エ蟷「�ス�ャ髫エ魃会スス�・髫エ蟶キ�」�ッ闖ォ�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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