Python 関数と変数のスコープ
ここでは Python 関数と変数のスコープについてご説明します。
Python のグローバル変数
プログラミングで「グローバル変数」というのは、プログラムのどこからでも利用できる変数のことです。
次のようにプログラムのメインの部分で定義した変数はグローバル変数で、どこからでも利用できます。
value = 100
def func():
print(f"value = {value} - in func()")
func()
print(f"value = {value} - after func()")
実行結果は次のようになります。 value はグローバル変数で、func() 関数内でも value の値が利用できています。
value = 100 - in func()
value = 100 - after func()
Python のローカル変数
プログラミングで「ローカル変数」というのは、プログラムの一部でしか利用できない変数のことです。
次のように関数内で定義した変数はローカル変数で、その関数内でしか利用できません。
def func():
value = 100
print(f"value = {value} - in func()")
func()
print(f"value = {value} - after func()")
実行結果は次のようになり、value はローカル変数なので、関数の外で value を利用とするとエラーになります。
value = 100 - in func()
Traceback (most recent call last):
File "/Users/user1/Src/Python/hello.py", line 7, in
print(f"value = {value} - after func()")
NameError: name 'value' is not defined
グローバル変数と同じ名前の変数を関数内で定義すると、その変数はグローバル変数とは別のローカル変数として扱われます。
その場合、関数内では同じ名前のグローバル変数は利用できなくなり、関数内で変数の値を変更してもグローバル変数に影響は与えません。
value = 200
def func():
value = 100
print(f"value = {value} - in func()")
print(f"value = {value} - before func()")
func()
print(f"value = {value} - after func()")
実行結果は次のようになり、関数内で value に別の値を代入しても、関数外では value の値は変更されていません。
value = 200 - before func()
value = 100 - in func()
value = 200 - after func()
Python 関数内でグローバル変数を定義・変更する
Pythno の関数内で変数を普通に定義するとローカル変数になってしまいますが、global 文を使うことによってグローバル変数として定義することができます。
def func():
global value
value = 100
print(f"value = {value} - in func()")
func()
print(f"value = {value} - after func()")
実行結果は次のようになり、関数内で定義した value 変数が関数外でも利用できていますね。
value = 100 - in func()
value = 100 - after func()
グローバル変数を関数内で変更したい時も global 文を使って行うことができます。
value = 200
def func():
global value
print(f"value = {value} - in func() 1")
value = 100
print(f"value = {value} - in func() 2")
print(f"value = {value} - before func()")
func()
print(f"value = {value} - after func()")
実行結果は次のようになります。 関数内でグローバル変数にアクセスでき、値の変更もできていますね。
value = 200 - before func()
value = 200 - in func() 1
value = 100 - in func() 2
value = 100 - after func())
以上、Python 関数と変数のスコープについてご説明しました。