Pythonのグローバル変数とローカル変数の使い方
Pythonの変数にはグローバル変数とローカル変数という2つのスコープが異なる変数を持つことができます。
グローバル変数は関数の外に宣言された変数でファイル内の位置からも参照可能になります。
それに対してローカル変数は関数内だけで有効な変数になります。
Pythonのグローバル変数
Pythonのグローバル変数は関数の外で定義され、ファイル内のどの位置からも参照が可能です。
g = 123 #グローバル変数 def func1() : print( "g={}".format( g )) func1() print( "g={}".format( g ))
上記のコードを実行すると
g=123 g=123
と関数内でも関数外からでも参照できます。
グローバル変数を関数内で変更する場合はglobalキーワードで宣言
グローバル変数で気をつけなければならないのは、関数内でグローバル変数の値を変更する場合は「global」キーワードをつけて関数内で再宣言します。
先ずは「global」キーワードがない場合
g = 123 #グローバル変数 def func1() : g = 456 print( "g={}".format( g )) func1() print( "g={}".format( g ))
上記のコードを実行すると
g=456 g=123
と関数内ではグローバル変数の「g」の値が「456」に変わっているように見えますが、関数終了後の「g」は「123」のままです。
これはグローバルの「g」と関数内のローカル変数「g」がメモリ上は別のエリアに取られていることが原因です。
また、
g = 123 #グローバル変数 def func1() : print( "g={}".format( g )) g = 456 func1() print( "g={}".format( g ))
「g」の値を変える場所を変えると
Traceback (most recent call last): File "main.py", line 7, in <module> func1() File "main.py", line 4, in func1 print( "g={}".format( g )) UnboundLocalError: local variable 'g' referenced before assignment
とエラーになり、うまく行きません。
関数内でグローバル変数を操作するには関数内で「global」キーワードをつけて宣言しなおします。
g = 123 #グローバル変数 def func1() : global g #グローバル変数を使うことを再宣言 g=456 print( "g={}".format( g )) g=789 print( "g={}".format( g )) func1() print( "g={}".format( g ))
上記のコードを実行すると
g=123 g=456 g=789
と意図した値に「g」の値が変わっています。
Pythonのローカル変数
Pythonのローカル変数は関数内だけで有効な変数で、関数の外から参照したり更新したりはできません。
def func1() : l = "ABC" print( "l={}".format( l )) func1()
上記のコードを実行すると
l=ABC
とローカル変数を参照できます。
次のコードのように関数外でローカル変数にアクセスしようとしても
def func1() : l = "ABC" print( "l={}".format( l )) func1() print( "l={}".format( l )) #関数外でアクセスしてみる
l=ABC Traceback (most recent call last): File "main.py", line 6, in <module> print( "l={}".format( l )) #関数外でアクセスしてみる NameError: name 'l' is not defined
とエラーになってしまいます。
まとめ
Pythonのグローバル変数とローカル変数は他の言語と同じようにそれぞれスコープを持っています。
特殊なのは関数内でグローバル変数を更新する場合は「global」キーワードで再宣言しなければなりません。