ローカル変数とグローバル変数について
今回の記事では、関数のローカル変数とグローバル変数、またスコープの概念について取り扱っていきます。
python、もといプログラミングにはスコープというものが存在します。これが結構分かりにくくて、つまづきやすいところなので、今回は丁寧に取り扱っていきます。
スコープとは、ざっくりいうとプログラムの有効範囲を表す言葉です。例えばある変数xが定義されたときに、それが関数内で定義されたのか、関数外で定義されたのか異なるものになる、などという場合があります。関数内で変数xが定義された場合にはそのxの適用範囲は関数内のみであり、関数外で関数内で定義されたxを参照することができない、ということがあります。なんだかよく分からなくなってきたので、実際にコードを見ながら解説していきたいと思います。
x = 5
def a():
x = 8
return x
print(a())
print(x)
実行結果
8
5
この例のように、関数の中でxを定義し、そのxをreturnで返すと、戻り値として関数内で定義されたx(この例では8)が返され、関数外で定義されているxは返されません。しかし、関数を呼び出した後は関数内で定義されたx(これがいわゆるローカルスコープのx)は消滅し、関数外(これがいわゆるグローバルスコープ)で定義されたxのみが存在するため、print(x)によってグローバルスコープのxが参照されます。
なんとなくスコープについて理解できたでしょうか。最初に押さえておくべきスコープはローカルスコープとグローバルスコープの二つです。
ローカルスコープとは、関数内で定義した時に発生するスコープで、関数内で定義した変数はそのローカルスコープ内、つまりその関数内のみで有効であり、関数外では使うことができません。つまり、上記の例において
def a():
x = 8
return x
print(x)
と書くとエラーが発生します。なぜなら、変数Xは関数a()内のローカルスコープにのみ存在し、グローバルスコープでローカルスコープの変数にアクセスすることはできないからです。
グローバルスコープは、pyhtonプログラム全体で有効であり、グローバルスコープで定義した変数はグローバルスコープ、ローカルスコープの両方で有効です。つまり、上記の例で
x = 5
def a():
return x
print(a())
と書くと、実行結果は
5
となります。つまり、この例では、ローカルスコープ(関数内)においてxが定義されていないため、グローバルスコープ(関数外)のxがreturn x のxに代入されたことになります。
ローカルスコープとグローバルスコープについてなんとなく理解できたでしょうか?
今回の記事はここまでで終わりです。次回もローカル変数とグローバル変数についてみていきます。お疲れさまでした。