スコープ(Scope)は、変数や関数が有効である範囲を指します。Pythonには主に4種類のスコープがあり、それぞれが異なる領域で変数を管理します。これらのスコープは、変数の可視性とライフタイムに影響します。
- ローカルスコープ(Local Scope): 関数内で定義された変数のスコープです。関数の外ではアクセスできません。
- エンクロージングスコープ(Enclosing Scope): 関数内に定義された他の関数(ネストされた関数)のスコープです。外側の関数の変数は内側の関数からアクセス可能です。
- グローバルスコープ(Global Scope): モジュール全体で有効なスコープです。関数の外で定義された変数は、モジュール内のどこからでもアクセスできます。
- ビルトインスコープ(Built-in Scope): Pythonがあらかじめ定義している関数や変数のスコープです。例えば、
print()
やlen()
などのビルトイン関数がこれに該当します。
具体例と説明
1. ローカルスコープ
ローカルスコープは関数内で定義された変数がその関数の中でのみ有効であることを示します。
例:
def my_function(): x = 10 print(x) # 出力: 10 my_function() # print(x) # これはエラーを引き起こします。xはローカルスコープ内でのみ有効です。
2. エンクロージングスコープ
エンクロージングスコープは、ネストされた関数のスコープです。内側の関数から外側の関数の変数にアクセスできます。
例:
def outer_function(): x = "Hello" def inner_function(): print(x) # 外側の変数にアクセス可能 inner_function() outer_function() # 出力: Hello
3. グローバルスコープ
グローバルスコープは、モジュール全体で有効な変数のスコープです。関数の外で定義された変数は、モジュール内のどこからでもアクセスできます。
例:
x = "I am global" def my_function(): print(x) # グローバル変数にアクセス可能 my_function() # 出力: I am global print(x) # 出力: I am global
4. ビルトインスコープ
ビルトインスコープは、Pythonが提供する組み込み関数や例外のスコープです。これらは常にアクセス可能です。
例:
def my_function(): print(len("Hello")) # ビルトイン関数lenを使用 my_function() # 出力: 5
スコープの階層(LEGB規則)
Pythonのスコープの階層は「LEGB規則」に従います。LEGBとは、Local、Enclosing、Global、Built-inの順でスコープを検索することを意味します。
例:
x = "global" def outer_function(): x = "enclosing" def inner_function(): x = "local" print(x) # 出力: local inner_function() print(x) # 出力: enclosing outer_function() print(x) # 出力: global
これらの例と参考文献を通じて、Pythonのスコープの基本的な使い方とその応用方法を理解することができます。スコープを適切に利用することで、コードの可読性とメンテナンス性が向上します。