Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ローカル変数、グローバル変数、ノンローカル変数のスコープ | 変数スコープ、ネスト関数、クロージャ
Pythonにおける関数型プログラミングの概念

bookローカル変数、グローバル変数、ノンローカル変数のスコープ

メニューを表示するにはスワイプしてください

Pythonが変数のスコープをどのように決定するかを理解することは、明確でバグのないコードを書くために重要です。Pythonは、変数の値をどこで探すかを決定するために、LEGBルールと呼ばれる特定の規則を使用します。LEGBは**Local(ローカル)・Enclosing(囲い込み)・Global(グローバル)・Built-in(組み込み)**の頭文字です。変数を参照するとき、Pythonは次の順序でその値を検索します:

  • Local:現在の関数やメソッド内で定義された変数;
  • Enclosing:最も近い囲い込み関数スコープ内の変数(ネストされた関数を使用している場合);
  • Global:モジュールの最上位で定義された変数、またはglobalキーワードで宣言された変数;
  • Built-inlenrangeなど、Pythonにあらかじめ割り当てられている名前。

このルールにより、Pythonは変数名を効率的に解決でき、変数の値がどこから来るのかを予測しやすくなります。時には、現在の関数のスコープ外の変数を変更したい場合があります。Pythonはこれに対して2つのキーワードを提供しています:globalnonlocalです。globalキーワードは、モジュールレベルの変数に値を代入することを可能にし、nonlocalはグローバルではない最も近い囲い込み関数スコープ内の変数を変更することを可能にします。

123456789101112131415161718
# Global scope global_var = "I am global" def outer(): # Enclosing scope enclosing_var = "I am enclosing" def inner(): # Local scope local_var = "I am local" print("Local:", local_var) print("Enclosing:", enclosing_var) # Found in enclosing scope print("Global:", global_var) # Found in global scope print("Built-in:", len([1, 2, 3])) # 'len' comes from built-in scope inner() outer()
copy
  • 変数 global_var はグローバルスコープで定義されており、モジュール内のどこからでもアクセス可能。
  • outer 関数内で enclosing_var は外側(エンクロージング)スコープの変数として作成され、ネストされた関数からアクセス可能。
  • ネストされた inner 関数は local_var を定義し、この変数はその関数内でのみ存在し、すべての外側スコープの変数へアクセスできることを示す。
  • len 関数は、Python が組み込みスコープから名前を取得できることを示すために使用。

この例は、Python がローカル、外側(エンクロージング)、グローバル、組み込みの順にスコープを検索して変数の値を見つける仕組みを示しており、変数解決が予測可能かつ整理されていることを示す。

1. Python において nonlocal キーワードは何をしますか?

2. LEGBルールとは何か?

question mark

Python において nonlocal キーワードは何をしますか?

正しい答えを選んでください

question mark

LEGBルールとは何か?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  1

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  1
some-alt