ローカル変数とグローバル変数について②
今回もローカルとグローバル変数、そしてスコープについて取り扱っていきます。
スコープには、LEGBルールがあります。これは、関数内で使用される変数がどのスコープに属するかを知るためのルールです。Lはローカルスコープ、Eは関数の外側の関数のスコープ、Gはグローバルスコープ、Bはビルトインスコープを表します。具体例を見ていきましょう。以下のコードがあるとします。
def a()
return x
このようなコードが書かれたとき、もしもxが定義されていなければエラーが発生します。そのため、Pythonはxが定義されているのかどうか、さまざまなスコープを調べます。このスコープを調べる順番に、LEGBルールが存在します。優先順位はL E G Bの順番です。
この例において、まずPythonはxがローカルスコープで変数が定義されているかどうかを調べます。そして、ローカルスコープに存在しない場合には、Eスコープを調べます。Eスコープとは、関数内に関数がネストされている場合に存在する、内側の関数からみた外側の関数内に存在するスコープのことです。Eスコープに存在しない場合には、Gスコープを調べ、最後にBスコープを調べます。B(ビルトイン)スコープとは、Pythonの標準ライブラリの変数のことです。openとか、typeとかのことですね。
このようにしてPythonはスコープを調べていき、スコープ内に変数が見つかればその変数を使用します。そのスコープにを調べる優先順位がLEGBルールです。
以上で今回の記事は終わりです。お疲れ様でした。