TIL19 | Python_Scope


Scopeは範囲を表します.
プログラミング言語では、scopeは任意のオブジェクト(変数、関数など)の有効範囲を記述します.
範囲外の場合は、このオブジェクトは使用できません.
変数または関数の範囲は、宣言された点と同じレベルの領域およびより内側の領域で有効です.

範囲は大体4種類あります。

  • Local Scope
  • Enclosed Scope
  • Global Scope
  • Built-in Scope
  • ローカル範囲が最も限られており、内蔵範囲が最も広い.

    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"