Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで変数の存在を確認する方法|locals()・globals()・hasattr()の使い方

Pythonでは、変数が存在するかどうかを確認するために、組み込み関数の locals()globals()、そして hasattr() を活用します。それぞれの役割と具体的な使い方を、サンプルコードと実行結果をもとに解説します。

変数の存在確認に使える3つの方法

  • locals():現在のローカルスコープ(関数やメソッド内)で定義されている変数を辞書形式で返します。
  • globals():モジュール全体(グローバルスコープ)で定義されている変数を辞書形式で返します。
  • hasattr():オブジェクトが指定した名前の属性を持っているかどうかを真偽値で判定します。

サンプルコード

x = 10

class foo:
    g = 'rt'
    def bar(self):
        m = 6
        print(locals())
        if 'm' in locals():
            print('m is local variable')
        else:
            print('m is not a local variable')

f = foo()
f.bar()

print(globals())
if hasattr(f, 'g'):
    print('g is an attribute')
else:
    print("g is not an attribute")

if 'x' in globals():
    print('x is a global variable')

実行結果

上記のコードを実行すると、次のような出力が得られます。

{'self': <__main__.foo instance at 0x0000000002E24EC8>, 'm': 6}
m is local variable
{'f': <__main__.foo instance at 0x0000000002E24EC8>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'C:/Users/TutorialsPoint1/~.py', '__package__': None, 'x': 10, '__name__': '__main__', 'foo': <class __main__.foo at 0x0000000002D29828>, '__doc__': None}
g is an attribute
x is a global variable
Process finished with exit code 0

コードの解説

1. ローカル変数の確認:locals()

メソッド bar() の中では、'm' in locals() という条件式を使って、変数 m がローカルスコープに存在するかどうかを判定しています。m = 6 が定義済みのため、「m is local variable」と表示されます。なお、locals() の戻り値には自動的に渡される引数 self も含まれている点に注目してください。

2. オブジェクト属性の確認:hasattr()

hasattr(f, 'g') は、インスタンス f が属性 g を持っているかどうかをチェックします。クラス foo 内で g = 'rt' と定義されているため True が返り、「g is an attribute」と出力されます。属性が存在しない場合にエラーを発生させずに安全に判定できるのが特徴です。

3. グローバル変数の確認:globals()

'x' in globals() は、変数 x がグローバルスコープに存在するかどうかを判定します。冒頭で x = 10 と定義しているため、「x is a global variable」と表示されます。globals() の戻り値には、__name____file__ など、Pythonが自動的に用意する特殊な変数も含まれます。

まとめ

Pythonで変数の存在を確認する際は、目的に応じて次の方法を使い分けると効果的です。

  • 関数内のローカル変数の確認 → locals()
  • モジュールレベルのグローバル変数の確認 → globals()
  • オブジェクトの属性の確認 → hasattr()

これらの組み込み関数を使いこなせるようになると、動的な変数操作や、未定義変数によるエラー(NameError や AttributeError)の事前防止に役立ちます。

  1. Pythonで変数がタプル型かどうかを判定する方法

    Pythonにおいて、ある変数がタプル型であるかどうかを確認したい場合は、組み込みの type 関数を使用するのが一般的な方法です。まず前提として、タプルは「イミュータブル(変更不可)」なデータ型です。つまり、一度定義した値は、インデックスを指定して要素へアクセスしても変更することができません。仮に要素を変更しようとするとエラーが発生します。この性質により、データを読み取り専用として扱うことが保証されるため、タプルは非常に重要なコンテナ型といえます。type 関数は、引数として渡された値やイテラブルオブジェクトの型を調べるために使われます。これに is 演算子と tuple 型を組み合わせるこ

  2. Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例

    Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実