TIL19 | Python_Scope
Scopeは範囲を表します.
プログラミング言語では、scopeは任意のオブジェクト(変数、関数など)の有効範囲を記述します.
範囲外の場合は、このオブジェクトは使用できません.
変数または関数の範囲は、宣言された点と同じレベルの領域およびより内側の領域で有効です.
Local Scope Enclosed Scope Global Scope Built-in Scope ローカル範囲が最も限られており、内蔵範囲が最も広い.
Local scopeを持つ変数、関数、またはオブジェクトの名前は、特定の範囲内でのみ有効です.
通常、関数で宣言される変数または関数にはlocalscopeがあります.これらの変数は関数でのみ有効です.
Enclost Scopeはネスト関数の役割ドメインです.
親関数で宣言された変数は、ネストされた関数にも有効です.
グローバル役割ドメインとは、関数内で宣言される変数または関数ではなく、関数の外で宣言される変数です.
Built-in scopeはscopeの中で最も広い範囲です.
Pythonに内蔵された、Pythonが提供する関数または属性には、内蔵された役割ドメインがあります.
また、build-inscopeはすべてのPythonファイルに有効な範囲があり、宣言する必要はありません.
たとえば、len関数にはlistなどのデータ構造内の要素の合計数を返す役割ドメインが組み込まれています.
変数または関数の定義が見つかった場合、Pythonは次の順序のscopeで検索されます.
Local => Enclosing => Global => Built-in
これは、最も狭い有効範囲から、より広い範囲まで、使用する変数または関数の定義を検索することを意味します.
したがって、同じ名前の変数が異なる範囲で宣言されると、より狭い範囲の変数(または関数)がシャドウ効果を発生し、より広い範囲の変数を遮断します.
プログラミング言語では、scopeは任意のオブジェクト(変数、関数など)の有効範囲を記述します.
範囲外の場合は、このオブジェクトは使用できません.
変数または関数の範囲は、宣言された点と同じレベルの領域およびより内側の領域で有効です.
範囲は大体4種類あります。
1. Local Scope
Local scopeを持つ変数、関数、またはオブジェクトの名前は、特定の範囲内でのみ有効です.
通常、関数で宣言される変数または関数にはlocalscopeがあります.これらの変数は関数でのみ有効です.
2. Enclosing Scope
Enclost Scopeはネスト関数の役割ドメインです.
親関数で宣言された変数は、ネストされた関数にも有効です.
3. Global Scope
グローバル役割ドメインとは、関数内で宣言される変数または関数ではなく、関数の外で宣言される変数です.
4. Built-in Scope
Built-in scopeはscopeの中で最も広い範囲です.
Pythonに内蔵された、Pythonが提供する関数または属性には、内蔵された役割ドメインがあります.
また、build-inscopeはすべてのPythonファイルに有効な範囲があり、宣言する必要はありません.
たとえば、len関数にはlistなどのデータ構造内の要素の合計数を返す役割ドメインが組み込まれています.
Shadowing
変数または関数の定義が見つかった場合、Pythonは次の順序のscopeで検索されます.
Local => Enclosing => Global => Built-in
これは、最も狭い有効範囲から、より広い範囲まで、使用する変数または関数の定義を検索することを意味します.
したがって、同じ名前の変数が異なる範囲で宣言されると、より狭い範囲の変数(または関数)がシャドウ効果を発生し、より広い範囲の変数を遮断します.
a = "Global"
def Shadowing()
a = "Local"
print(a)
print(a)
>>> "Global"
Shadowing()
>>> "Local"
Reference
この問題について(TIL19 | Python_Scope), 我々は、より多くの情報をここで見つけました https://velog.io/@wjddk97/TIL19-PythonScopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol