Categories: Python

【Python】変数の存在確認をする方法

この記事では、Pythonで定義した変数に値があるかどうかを確認する方法とそもそも変数が存在するかどうかを確認する方法を解説します。

関数内でグローバル変数が存在するかどうかを判定して存在しない場合に生成したりすることもできます。

それでは、変数の存在確認をする方法を見ていきましょう!

変数の値があるかどうか

変数の値があるかどうか確認するにはif文にその変数を指定することで判別できます。

num = 0

# 数値型は0ならFalse、それ以外ならTrueになる
if num:
    print('値が存在する')
else:
    print('値がありません')


s = ''

# 文字列やリストなんかは空ならFalse、空でなければTrue
if s:
    print('値が存在する')
else:
    print('値がありません')

実行結果

値がありません
値がありません

変数の値がNoneかどうか判定する場合にはis演算子を使う。

num = None

if num is None:
    print('Noneです')
else:
    print('Noneではありません')

実行結果

Noneです

変数に値が存在しない場合にデフォルト値を渡したい時は、論理演算子のorを使うことで簡単に実装できる。

num = None

# numに値があればnumが代入され、なければ1が代入される
num = num or 1
print(num)

実行結果

1

変数が存在するかどうか

変数自体が存在するかどうかを判別したい場合は、locals()関数が取り扱う辞書に変数の名前のkeyが存在するかどうかを判定することで確認することができます。

num = None

if 'num' in locals():
    print('変数が存在する')
else:
    print('変数が存在しない')

実行結果

変数が存在する

try文を使うことでも変数が存在しない場合のコードを書くことができます。

try:
    print(num)
except NameError:
    print('変数が存在しません')

実行結果

変数が存在しません

関数内から任意のグローバル変数が存在するか判別するにはglobals()関数が取り扱う辞書に変数の名前のkeyが存在するかどうかを判定することで確認することができます。

def func():
    if "val" in globals():
        print('存在する')
    else:
        print('存在しない')
    
func()

val = 1
func()

実行結果

存在しない
存在する

ちなみに、任意のグローバル変数が存在しない場合に関数内から変数を生成するにはglobalを使います。

def func():
    if "val" in globals():
        print('存在する')
    else:
        print('存在しないので生成')
        global val
        val = 1
    
func()
func()

実行結果

存在しないので生成
存在する

まとめ

この記事では、変数の値があるかどうかと変数自体が存在するかどうかを判別する方法を見てきました。

変数の状態によって処理を変えることで柔軟性の高いプログラムを作成できます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago