今回は、Pythonのglobals()関数について詳しくお話しします。
では、さっそく始めてみましょう。
Python の globals() 関数って何?
Python globals()関数は、プログラム中の特定のコードに含まれるすべてのグローバル変数とその値のリストにアクセスできるようにする関数です。
globals()関数は、現在のグローバルシンボルテーブルを含むPythonの辞書を表しています。
シンボルテーブルって何?
シンボルテーブルとは何ですか?
シンボルテーブルとは、異なるシンボルに関する情報を表すテーブル構造です。
シンボルは、変数、キーワード、関数など、プログラミングコードの任意の属性にすることができます。
さらに、シンボルテーブルは、これらのシンボルの名前と、そのオブジェクトのタイプ、プログラム全体の範囲などを指定します。
シンボルテーブルは、次のような種類に分類される。
- グローバルテーブル。グローバルテーブル:グローバル変数に関する情報を辞書形式で表現します。
- ローカルテーブル。ローカル変数に関する情報を辞書形式で表現します。
Python の locals() 関数は、現在のローカルシンボルテーブルを表し、それを返します。
ローカル変数とlocals()関数についてもっと知りたい方は、Python locals()関数をご覧ください。
globals()関数の動作を理解した上で、次にその構造を理解しましょう。
globals() 関数のシンタックス
globals()関数はパラメータを受け取りません。
これは、現在のシンボルテーブルの値を示す辞書を返します。
構文は次のとおりです。
globals ()
|
では、以下の例でglobals()関数の実装を理解しましょう。
Python の globals() 関数を例として実装する
以下の例では、be globals()関数を呼び出して、出力をこのように解釈しています。
例えば、以下の様になります。
print ( globals ())
|
globals()関数は、グローバルシンボルテーブルの値の辞書を返し、モジュールやファイル名などの詳細情報を提供します。
結果は以下の通りです。
{ '__cached__' : None , '__builtins__' : <module 'builtins' (built - in )>, '__name__' : '__main__' , '__spec__' : None , '__file__' : 'main.py' , '__doc__' : None , '__loader__' : <_frozen_importlib.SourceFileLoader object at 0x7f31606f4e80 >, '__package__' : None }
|
グローバルスコープ変数とローカルスコープ変数の表示
次に、関数内でグローバル変数とローカル変数を定義し、その結果を知るためにglobals()関数を呼び出してみましょう。
例えば、以下の様になります。
varG = 20 # global variable
def var():
varL = 100 # local variable
print ( globals ())
|
Pythonのglobals()関数は、グローバル変数(varG)とその値、関数、ファイル名などに関する情報を含む辞書を返します。
しかし、気づけばglobals()関数はローカル変数(varL)に関する情報を表現していません。
その作業は locals() 関数によって行われます。
出力してください。
{'__file__': 'main.py', 'varG': 20, '__loader__': <_frozen_importlib.SourceFileLoader object at 0x7f7ff13e7e48>, '__cached__': None, '__doc__': None, '__package__': None, '__name__': '__main__', '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, 'var': <function var at 0x7f7ff1436bf8>} |
変数の変更と操作
以下のように、グローバル変数の値を変更することも可能です。
例えば、以下の様になります。
var = 100
globals ()[ 'var' ] = 12
print ( 'var:' , var)
print ( globals ())
|
ここでは、var = 100 を代入しています。
さらに、globals()関数を使って、変数「var」の値を12に変更しました。
出力を分析すると、globals 関数はグローバル・シンボル・テーブルの dict を、変数の更新値、すなわち var = 12 と共に返します。
結果は、以下の通りです。
var: 12
{ '__file__' : 'main.py' , '__builtins__' : <module 'builtins' (built - in )>, '__doc__' : None , '__spec__' : None , '__name__' : '__main__' , '__package__' : None , '__loader__' : <_frozen_importlib.SourceFileLoader object at 0x7f3f83a1ae10 >, '__cached__' : None , 'var' : 12 }
|
まとめ
ここまでで、このトピックは終了です。
何か疑問があれば、お気軽にコメントください。