嫁ちゃん
変数にはローカル変数とグローバル変数があると聞いたのですが、どんなの?
わたし
変数が使用できる範囲(スコープ)が違うんだよ。
目次
グローバル変数
グローバル変数とローカル変数の違い
グローバル変数とローカル変数の違いは、変数が使用できる範囲(スコープ)の違いにあります。
ローカル変数(ローカルスコープで宣言された変数)は関数やクラス内で宣言された変数で、これは別の関数からは基本的には参照できません。
また、グローバル変数(グローバルスコープで宣言された変数)は関数の外で宣言された変数を関数の中で参照はできますが書き換えることができません。書き換えるには global キーワードを付けた宣言が関数内に必要です。
グローバル変数の参照
a = 100
def sample():
a = 999
print(a)
sample()
print(a)
関数 sample の中の print 文 が実行され、グローバル変数 a の内容が出力されましたが、最後の print 文 の出力結果は 100 のままです。
999
100
これは、同じ a という変数でも、グローバル変数として宣言された変数 a と、ローカル変数として宣言された変数 a は別々のものになります。
グローバル変数そのまま関数内で使う
a = 100
def sample():
global a
a = 999
print(a)
sample()
print(a)
関数内で global キーワードを付けて宣言された a は、関数の外で宣言された a を書き換えることができます。
999
999
関数内で宣言されたローカル変数は関数の外では参照できない
def sample()
a = 100
print(a)
エラーになりましたね。
print a
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(a)?
おわりに
嫁ちゃん
同じ変数 a でもスコープが違うだけで、書き換えができたり、できなかったりするのね。
わたし
そうなんですよ。
だから、global キーワードは便利(ローカルスコープではなくなる)なので多用してしまうと、どこで宣言され、どこで値が書き換えられたのか、わかりにくくなってしまうので、注意が必要だよ。
だから、global キーワードは便利(ローカルスコープではなくなる)なので多用してしまうと、どこで宣言され、どこで値が書き換えられたのか、わかりにくくなってしまうので、注意が必要だよ。
[A8_TechAcademy065]
[Footer]