<一覧に戻る

ローカル変数とグローバル変数

Pythonにおける変数にはスコープ(有効範囲)という重要な概念があります。

スコープとは、変数がどこまで使えるかを決めるルールのことです。このスコープによって、変数は「ローカル変数」と「グローバル変数」に分けられます。

初心者のうちは「関数の中で作った変数が外で使えない」「なぜか値が変わらない」といった混乱が起こりやすいですが、それはスコープを正しく理解していないことが原因です。

ここでは、Pythonでのローカル変数とグローバル変数の違いをサンプルコードとともに解説します。

ローカル変数とは?

ローカル変数とは、関数の中で定義された変数のことです。

ローカル変数は関数内でのみ有効であり、関数の外から直接アクセスすることはできません。また、関数が終了するとローカル変数は自動的に消えます。

例として、関数の中で挨拶メッセージを作成するプログラムを見てみましょう。

def greet(name):
    greeting = f"Hello, {name}!"  # greetingはローカル変数
    return greeting

print(greet("Alice"))  # Hello, Alice!
# print(greeting)  # これはエラーになります。greetingは関数内でのみ有効です。

このコードでは、greet関数の中でgreetingという変数を定義しています。 greeting は関数の中でしか使えないローカル変数なので、print(greeting)のように関数の外から呼び出そうとするとエラーになります。

つまり、ローカル変数は「関数専用の変数」であり、外部から干渉されないため、関数ごとに独立した安全な処理が行えるという特徴があります。

グローバル変数とは?

グローバル変数とは、関数の外で定義された変数のことです。 スクリプト全体で有効なため、どの関数からでもアクセスできます。

次の例では、関数内からグローバル変数を参照しています。

message = "Hello, World!"  # messageはグローバル変数

def print_message():
    global message  # 右のシミュレーターで実行する時のみ必要
    print(message)  # グローバル変数にアクセス

print_message()  # Hello, World!

ここで使っている message はグローバル変数なので、print_message 関数の中からでも問題なく参照できます。 (画面右のシミュレーターで実行する場合のみglobal messageと記述する必要があります。通常のPythonでは、グローバル変数の値を参照するときに、globalは無くても動作します。)

プログラム全体で共有できるため便利ですが、あまり多用すると「どこで値が書き換わったのか分からない」といったトラブルの原因になります。そのため、必要なときにだけ使うのがポイントです。

グローバル変数を変更するには?

関数内からグローバル変数を「参照」するだけなら問題ありませんが、「値を変更」しようとするとエラーになります。 これは、Pythonが関数内の変数をローカル変数として扱おうとするためです。

その場合は、globalキーワード を使うことで、関数内からグローバル変数を明示的に操作できます

counter = 0  # グローバル変数

def increment():
    global counter  # counterをグローバル変数として宣言
    counter += 1

increment()
increment()
print(counter)  # 2

この例では、最初に counter というグローバル変数を定義し、increment 関数の中で global counter を宣言しています。 これにより、counter をローカル変数ではなくグローバル変数として扱えるようになり、関数を呼び出すたびに値が加算されます。

ただし、グローバル変数を頻繁に書き換えるとプログラムの予測が難しくなり、バグの原因になりやすいので注意が必要です。

ローカル変数とグローバル変数が同名だったら?

プログラムを書いていると、同じ名前の変数を「関数の外」と「関数の中」で使ってしまうことがあります。 この場合、関数内ではローカル変数が優先されるため、意図しない結果を招くことがあります。

例を見てみましょう。

value = 10  # グローバル変数

def change_value():
    value = 5  # ローカル変数
    print("Inside function:", value)

change_value()  # Inside function: 5
print("Outside function:", value)  # Outside function: 10

ここでは、グローバル変数 value に 10 を代入していますが、change_value 関数の中でも同じ名前 value をローカル変数として定義しています。そのため、関数の中では「ローカル変数の 5」が優先され、関数の外では「グローバル変数の 10」がそのまま使われます。

このように、スコープのルールを正しく理解していないと「値が変わらない」「意図しない結果になる」といったバグが発生しやすくなるので注意しましょう。

まとめ

今回は、Pythonにおける ローカル変数とグローバル変数の違い を解説しました。

  • ローカル変数は関数内でのみ有効で、関数が終了すると消える
  • グローバル変数はプログラム全体で有効で、どの関数からでもアクセスできる
  • 関数内でグローバル変数を変更したい場合は global キーワードを使う
  • 同名の変数があった場合はローカル変数が優先される

スコープを意識して変数を使うことで、コードの見通しが良くなり、予期しないエラーやバグを防ぐことができます。初心者のうちに「ローカル変数とグローバル変数の違い」をしっかり理解しておくことは、Pythonの基礎を固めるうえで非常に重要です。

これらの概念を理解することで、Pythonでより効果的に変数を管理し、コードの可読性を高めることができるようになります。

出力結果: