0から始めるPython独学ラボ

化学専門の大学生が趣味で始めたPythonをできるだけ分かりやすく説明します

ローカル変数とグローバル変数について

今回の記事では、関数のローカル変数とグローバル変数、またスコープの概念について取り扱っていきます。

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に代入されたことになります。

 

ローカルスコープとグローバルスコープについてなんとなく理解できたでしょうか?

今回の記事はここまでで終わりです。次回もローカル変数とグローバル変数についてみていきます。お疲れさまでした。