スコープの基本
Pythonには変数の「スコープ」という概念があり、変数がどの範囲で有効であるかを決定します。スコープには大きく分けて2つの種類があります:ローカル変数とグローバル変数です。この記事では、スコープの基本的な概念と、変数の有効範囲について解説します。
ローカル変数とは?
ローカル変数とは、関数内で定義された変数で、その関数の中だけで有効です。関数が実行されるとローカル変数が生成され、関数の実行が終わるとローカル変数は破棄されます。次の例では、関数内で定義された変数x
がローカル変数となります。
# ローカル変数の例
def my_function():
x = 10 # ローカル変数
print(x)
my_function() # 出力: 10
print(x) # エラー: xは関数外では存在しない
このコードでは、x
は関数my_function
内でのみ有効です。関数外でx
を参照しようとするとエラーが発生します。
グローバル変数とは?
グローバル変数とは、関数の外で定義された変数で、プログラム全体で有効です。関数内でもグローバル変数を使用できますが、関数内でグローバル変数を変更するにはglobal
キーワードを使う必要があります。次の例を見てみましょう。
# グローバル変数の例
x = 20 # グローバル変数
def my_function():
global x
x = 10 # グローバル変数を変更
print(x)
my_function() # 出力: 10
print(x) # 出力: 10
この例では、global
キーワードを使って関数内でグローバル変数x
を変更しています。global
を使わない場合、関数内のx
はローカル変数として扱われ、グローバル変数は変更されません。
スコープの基本ルール
Pythonでは、変数のスコープに関して「LEGB」と呼ばれるルールが適用されます。LEGBは、次の4つのスコープを表します。
- L: Local(ローカルスコープ) – 現在の関数内のスコープ
- E: Enclosing(外側の関数のスコープ) – 関数の中にネストされた関数がある場合のスコープ
- G: Global(グローバルスコープ) – モジュール全体のスコープ
- B: Built-in(ビルトインスコープ) – Pythonの組み込み関数のスコープ
これらのルールに従って、Pythonは変数を解決します。最も内側のスコープから外側のスコープに向かって変数が探されます。
スコープの違いによる挙動の違い
ローカル変数とグローバル変数の違いにより、同じ変数名でもスコープによって異なる挙動を示します。次の例では、同じ変数名value
をローカルスコープとグローバルスコープで使用しています。
# スコープによる変数の挙動の違い
value = 100 # グローバル変数
def my_function():
value = 10 # ローカル変数
print("ローカル変数:", value)
my_function() # 出力: ローカル変数: 10
print("グローバル変数:", value) # 出力: グローバル変数: 100
この例では、関数内でvalue
というローカル変数が定義されており、グローバル変数とは異なる値を持っています。
スコープに関するまとめ
変数の種類 | 定義場所 | 有効範囲 |
---|---|---|
ローカル変数 | 関数内 | 関数の内部 |
グローバル変数 | 関数外 | プログラム全体 |
まとめ
Pythonにおける変数のスコープは、コードの設計と実行において非常に重要な概念です。ローカル変数は関数内でのみ有効で、グローバル変数はプログラム全体で使用されます。関数内でグローバル変数を変更する場合はglobal
キーワードが必要です。スコープのルールを理解することで、変数の扱いが正確になり、バグの少ないコードを記述できるようになります。