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における ローカル変数とグローバル変数の違い を解説しました。
スコープを意識して変数を使うことで、コードの見通しが良くなり、予期しないエラーやバグを防ぐことができます。初心者のうちに「ローカル変数とグローバル変数の違い」をしっかり理解しておくことは、Pythonの基礎を固めるうえで非常に重要です。
これらの概念を理解することで、Pythonでより効果的に変数を管理し、コードの可読性を高めることができるようになります。