Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの変数スコープ基本ルールとは?LEGBルールをわかりやすく解説

Pythonにおける変数の参照順序(スコープの解決方法)を理解するうえで、最も有名なのが「LEGBルール」です。これは、Mark Lutz氏の名著『Learning Python』の中で紹介されている記憶術で、Pythonが変数を探す順序を4つの頭文字で表したものです。

LEGBルールとは?

Pythonは変数を参照する際、最も狭いスコープから最も広いスコープへと、以下の順序で名前を探します。

L:Local(ローカル)

現在実行中の関数内で定義された変数を指します。関数の内部で代入された変数は、その関数のローカルスコープに属します。

E:Enclosing(エンクロージング)

別の関数を囲む外側の関数(ネストした構造の親関数)のローカルスコープで定義された変数を指します。たとえば、関数の中に関数が定義されている場合、内側の関数から見て外側の関数の変数がこれに該当します。

G:Global(グローバル)

ファイルやモジュールのトップレベルで定義された変数を指します。モジュール全体からアクセス可能な名前空間です。

B:Built-in(ビルトイン)

Pythonインタプリタの起動時にあらかじめ読み込まれる組み込みの名前を指します。print() や len() などが代表例です。

コード例で確認する

x = "global"  # Global
def outer():
    x = "enclosing"  # Enclosing
    def inner():
        x = "local"  # Local
        print(x)
    inner()
outer()

この例では、inner() 内の print(x) はまずローカルの x を探し、見つかればそれを使用します。もしローカルになければ、Enclosing → Global → Built-in の順に探していきます。

まとめ

LEGBルールを覚えておくと、「どの変数が実際に使われるのか」を正確に予測できるようになり、スコープに関するバグの防止にも役立ちます。Pythonのコードを読み書きするうえで、ぜひ押さえておきたい基本概念です。

  1. Pythonのパッケージとは?モジュールとの違いをわかりやすく解説

    Pythonにおける「パッケージ」を正しく理解するには、まず「モジュール」について知っておく必要があります。この記事では、モジュールとパッケージの基本概念、両者の違い、そして実際のインポート時の挙動について、具体例を交えながらわかりやすく解説します。 モジュールとは何か Pythonでは、任意の .py ファイルが1つのモジュールとして扱われます。モジュール名は、ファイル名から拡張子「.py」を除いたもの、すなわちそのモジュールの __name__ 属性に相当する名前になります。たとえば sample.py というファイルは、「sample」という名前のモジュールです。 パッケージとは何か

  2. Pythonにおける例外処理のベストプラクティス徹底解説

    Pythonの例外処理におけるベストプラクティスPythonで堅牢なコードを書くためには、適切な例外処理が欠かせません。ここでは、実務で役立つ例外処理のベストプラクティスをわかりやすく解説します。1. エラーコードではなく例外を使うエラー状態を示すステータスコードを返すよりも、例外を発生させる方が優れています。Pythonでは言語のコア部分や標準ライブラリ全体が例外を投げる仕組みになっているため、例外は適切に処理すべきものです。丁寧に処理された例外は、エラーコードやトレースバックの羅列よりもはるかに読みやすく、コードの保守性も大きく向上します。2. 例外をフロー制御に使わない例外は、通常の実行