変数はいろんな箇所に宣言できますが、どこに宣言するかで扱いが異なってきます。
基本的に関数の内部で宣言した変数は、ローカル変数と言います。
関数の外部(外側)で宣言した変数は、グローバル変数と言います。
以下のサンプルで確認しましょう。
def func1(number):
print(“ローカル変数number:”, number) ・・・(a)
print(“関数の中でのggg:”, ggg) ・・・(b)
ggg = “12345” ・・・①
func1(100) ・・・②
print(“関数の外でのggg:”, ggg) ・・・③
print(“関数の外でのnumber”, number) ・・・④
これを実行すると、以下のように表示されます。
———————————————————————
ローカル変数number: 100
関数の中でのggg: 12345
関数の外でのggg: 12345
Traceback (most recent call last):
File “C:\Users\taka\Desktop\python\sample10.py”, line 8, in <module>
print(“関数の外でのnumber”, number)
NameError: name ‘number’ is not defined
———————————————————————
解説します。
まず、defでfunc1という関数を定義しています。
このfunc1関数内で、ローカル変数であるnumberを表示されています。
続いてグローバル変数であるgggを表示させています。
次に関数の外部(外側)です。
①でグローバル変数gggに、12345 を代入しています。
②でfunc1関数に引数100を渡しています。
⇒100が渡ってきたので、(a)で100が表示され、(b)で12345が表示されます。
③ではグローバル変数を表示させているので、12345が表示されます。
最後の④は、関数内部で宣言したnumberを表示させようとしているため、
有効範囲ではない、ということでエラーになります。
次に、関数の中でグローバル変数に値を代入したい場合の例を説明します。
関数の中で値を代入すると、その代入された変数はローカル変数の扱いになります。
明示的にグローバル変数であることを表すなら、global と付けます。
def 関数名():
global 変数名1, 変数名2 …
以下のサンプルで確認しましょう。
def func2(number):
global ggg ・・・③
ggg = “ABCDE” ・・・④
print(“ローカル変数number:”, number)
print(“関数の中でのggg:”, ggg) ・・・⑤
ggg = “12345” ・・・①
func1(100) ・・・②
print(“関数の外でのggg:”, ggg) ・・・⑥
これを実行すると、以下のように表示されます。
———————————————————————
ローカル変数number: 100
関数の中でのggg: ABCDE
関数の外でのggg: ABCDE
———————————————————————
実行の順序で解説します。
①でグローバル変数が宣言されて、そこに、12345が代入されます。
②でfunc2関数を呼び出します。
③でグローバル変数を関数の中で定義しています。
④で、そのグローバル変数に、ABCDEが代入されます。
⑤で、そのグローバル変数を表示させています。 ABCDE と表示されます。
⑥でも、グローバル変数gggを表示させていますが、④でgggがABCDEに置き換わっているため、ここでもABCDEと表示されるわけです。