【Python】グローバル変数の書き方と注意点

嫁ちゃん
嫁ちゃん
変数にはローカル変数とグローバル変数があると聞いたのですが、どんなの?

わたし
わたし
変数が使用できる範囲(スコープ)が違うんだよ。

グローバル変数

グローバル変数とローカル変数の違い

グローバル変数とローカル変数の違いは、変数が使用できる範囲(スコープ)の違いにあります。

ローカル変数(ローカルスコープで宣言された変数)は関数やクラス内で宣言された変数で、これは別の関数からは基本的には参照できません。

また、グローバル変数(グローバルスコープで宣言された変数)は関数の外で宣言された変数を関数の中で参照はできますが書き換えることができません。書き換えるには 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 キーワードは便利(ローカルスコープではなくなる)なので多用してしまうと、どこで宣言され、どこで値が書き換えられたのか、わかりにくくなってしまうので、注意が必要だよ。

この記事がお役に立ちましたら幸いです。

では、また。

※本サイトの漫画やイラストはフィクションであり、実在の製品・団体・人物・地名とは関係ありません。
※本サイトに掲載する情報には充分に注意を払っておりますが、その内容について保証するものではありません。
※本サイトの使用ならびに閲覧によって生じたいかなる損害にも責任を負いかねます。
タイトルとURLをコピーしました