Pythonで変数が定義されているかどうかを判定する

Pythonのglobals()はグローバルなシンボルテーブル(グローバル変数)を、locals()はローカルなシンボルテーブル(ローカル変数)を返します。 これらを使って、変数が定義済みかどうかを判定できます。

各変数の定義位置の確認

global_var1 = 1000

def print_variable():
    local_var1 = 0

    print(globals())
    print(locals())
#;

if __name__ == "__main__":
    main_var1 = 10
    print_variable()

出力

{ ..., 'global_var1': 1000, ..., 'main_var1': 10 }
{ 'local_var1': 0 }
“__main__”の中もグローバル扱いになる。

変数が定義されているかどうかを判定する方法

変数名を文字列で指定し、in演算子で確認します。

def check_variable():
    local_var1 = 0

    if 'local_var1' in globals():
        print('local_var1 in globals')
    if 'local_var2' in globals():
        print('local_var2 in globals')
    if 'local_var1' in locals():
        print('local_var1 in locals')
    if 'local_var2' in locals():
        print('local_var2 in locals')

    if 'global_var1' in globals():
        print('global_var1 in globals')
    if 'main_var1' in globals():
        print('main_var1 in globals')
    if 'global_var1' in locals():
        print('global_var1 in locals')
    if 'main_var1' in locals():
        print('main_var1 in locals')
#;

global_var1 = 1000

if __name__ == "__main__":
    main_var1 = 10
    check_variable()

    if 'main_var1' in globals():
        print('[__main__] main_var1 in globals')
    if 'main_var1' in locals():
        print('[__main__] main_var1 in locals')

    if 'global_var1' in globals():
        print('[__main__] global_var1 in globals')
    if 'global_var1' in locals():
        print('[__main__] global_var1 in locals')

    if 'local_var1' in globals():
        print('[__main__] local_var1 in globals')
    if 'local_var1' in locals():
        print('[__main__] local_var1 in locals')
#;

出力

local_var1 in locals
global_var1 in globals
main_var1 in globals
[__main__] main_var1 in globals
[__main__] main_var1 in locals
[__main__] global_var1 in globals
[__main__] global_var1 in locals
global_var1main_var1”__main__”の中では、グローバルでも、ローカルでも判定できる。
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です