Python関数のスコープのLEGB順序を詳しく説明します。


ここでは、Python関数のスコープの検索手順を紹介します。
1.LEGBとは何ですか
L:local関数の内部作用領域
E:enclosing関数内部と埋め込み関数間
G:グローバルスコープ
B:build-in内蔵作用領域
2.LEGBは何をするものですか?
なぜこれを紹介しないといけないですか?それともそれらの役割は何ですか?
理由は私たちがPython関数を勉強している時に、しばしばドメインを定義する問題、変数全体、内部変数、内部埋め込み関数などがあります。Pythonはどうやって検索しますか?そしてPythonはどの順番で調べられますか?ここで順番を説明します。
3.順番は何ですか
名前と同じで、Pythonの関数内の検索は4種類に分けられています。LEGBとも言われています。この順序で探しています。
まず、localです。まず関数の内部を検索します。
次に、enclosingです。関数の内部と埋め込み関数の間を再検索します。
その次に、globalで、全体を探します。
最後に、build-in、内蔵作用領域です。
4.例を挙げて説明する
ex 1

passline = 60

def func(val):
  if val >= passline:
    print('pass')
  else:
    print('failed')

func(89)  

'''''''''''' 
pass
[Finished in 0.2s] 
''''''''''''
Python関数はまずlocalを検索します。局部変数のスコープにはpasslineの定義がありません。そして関数の内部に埋め込み関数がないことが分かりました。この時Pythonはglobalを探し始めます。大域でpasslineの定義を探して呼び出します。
ex 2

def Max(val1, val2):
  return max(val1, val2)

print(Max(90, 100))

'''''''''
100
[Finished in 0.1s]
'''''''''

Max関数では、直接に他の関数を呼び出します。呼び出したmax()は、関数が定義されていませんが、上記の4番目の種類に属しています。最後のステップがここにあります。
二つ目については、埋め込み関数に属していますが、関数の中でもう一つの関数を定義しても、まずlocal関数の中に定義があるかどうかを調べてから、関数の中に埋め込み関数が定義されているかを調べます。
以上が本文の全部です。皆さんの勉強に役に立ちたいです。