Python ローカル関数とグローバル関数

ローカル変数 Python入門
ローカル変数

変数には、「スコープ」と呼ばれる、変数の有効範囲の概念があります。

 

関数の中で定義された変数のことを「ローカル変数」と呼び、関数の外で定義された変数を「グローバル変数」と呼びます。

 

ローカル変数は同じ関数の中でのみ参照できる変数で、グローバル変数はどこからでも参照できる変数になります。

 

イメージ的には、グローバル変数は世間の常識みたいなもので、ローカル変数は仲間内だけで通用するもの、みたいな感じでしょうか??

 

たとえば、グローバル変数的なものとして、「キムタク=木村拓哉」というものがあったとして、学校の同じクラスの木村琢磨くんを「キムタク」というニックネームで呼んでいる、という感じ。

 

同じクラスの中だけだったら、「キムタク=木村琢磨くん」で通用しますが、学校の外では、「キムタク=木村拓哉」という感じになるイメージかなぁ、と思います。

ローカル変数

次の例は、「悟空」がグローバル変数「ピッコロ」がローカル変数として書いた文です。

関数dragonballを実行すると「悟空 ピッコロ」と、グローバル変数、ローカル変数の両方ともがprintされます。

 

一方、次の例では、関数dragonballにローカル変数の「ピッコロ」しか入れていません。

 

で、グローバル変数とローカル変数をprintしようとすると、ローカル変数であるb(ピッコロ)はis not defined(定義されてない)とエラーになってしまいます。

 

グローバル変数を変更

なお、関数の中でグローバル変数に値を代入しようとすると、新しいローカル変数とみなされて動作します。

そのため、以下の例では、関数dragonball2でグローバル変数 a に値(悟飯)を代入しても、グローバル変数 a (悟空)の値は変わりません。

 

グローバル変数の値を変更するためには、グローバル変数を変更するよ、というのを明確に意思表示しなければならないです。

以下のように「global a」として、aはグローバル変数で、それに値を代入するよ、という表現が必要です。

 

自分がいまいじっているのが、グローバル変数なのか、ローカル変数なのか、変数のスコープを意識してプログラミングしないと、意図しない動きをする恐れがあるので、注意が必要ですね。。。

 

タイトルとURLをコピーしました