可変スコープ
一般的に、プログラミング言語では、コード構造の観点から、変数のスコープは、ブロックレベル、関数、クラス、モジュール、パッケージなどの小レベルから大レベルまであります。ただし、Pythonにはブロックレベルのスコープはありません。つまり、ステートメントブロック、ステートメントブロック、コンテキストマネージャーなどの場合、スコープの概念はなく、通常のステートメントと同等です。
if True: # if语句块没有作用域
x = 1
print(x)
def func(): # 函数有作用域
a = 8
print(a)
NameError: name 'a' is not defined
通常、関数内のコードは外部変数にアクセスできますが、外部コードは通常、内部変数にアクセスできません。
Pythonのスコープには、次の4つのレイヤーがあります。
- L(ローカル)ローカルスコープ
- クロージャ関数外の関数のE(囲み)
- G(グローバル)グローバルスコープ