[Python] Scope


Scopeは範囲の意味です。


プログラミング言語では、任意のオブジェクト(変数、関数など)が有効範囲を表します.
範囲外の場合は、このオブジェクトは使用できません.
Pythonではscopeは常にオブジェクト宣言の位置から親オブジェクトに、下からすべて
サブオブジェクトとその範囲.
Scopeの範囲は大体以下の4種類があります.
1. Local Scope
2. Enclosed Scope
3. Global Scope
4. Built-in Scope
ローカル範囲が最も限られており、内蔵範囲が最も広い.

Local Scope


localscopeを持つ変数、関数、またはオブジェクトは、その名の通り、特定の範囲内でのみ有効です.
主に関数で宣言される変数または関数にはlocalscopeがあります.そしてこれらの変数.
この関数でのみ有効です.
def func():
	a = 1 # 함수안에서 선언됬음으로 해당 함수안에서만 유효한 변수
    print(a) #정상출력
#
print(a) #함수밖에서 해당 변수를 찾을 수 없어 에러 발생

Enclosing Scope


Enclost Scopeは、オーバーラップ関数がある場合に適用されるScopeです.
親関数で宣言された変数は、オーバーラップ関数でも有効です.
def outer():
	a = 1
    print(a)
    def inner():
    	b = 7
        print(a + b)# 부모 함수 안에서 선언된 변수(a) 사용가능
    inner()
    print(b) inner함수에서 선언된 b는 사용할수 없다. 에러발생

Global Scope


グローバル役割ドメインとは、関数内で宣言される変数または関数ではなく、関数の外で宣言される変数です.
変数または関数の範囲は、宣言された場所と同じレベルの領域、およびより内側の領域で有効です.
またglobal scopeを持つ変数と関数は、宣言されたポイントがファイルの一番外側にあるため、ファイルで宣言されたポイントの下に有効な範囲があります.
k = 9 #함수 밖에서 변수 선언
def outer():
	a = 1
    print(a + k) #함수밖에서 선언된 Global Scope이므로 k 사용가능
    def inner():
    	b = 7
        print(a * b * k) #k와 a 둘다 사용가능
    inner()
print(k)

Built-in Scope


Built scopeはscopeの中で最も広い範囲です.
Pythonに内蔵された、Pythonによって提供される関数または属性には、scopeが内蔵されています.また、build-inscopeが宣言されていなくても、すべてのPythonファイルに有効な範囲があります.たとえば、len関数はリストなどのデータ構造内の要素の合計数を返します.
build-in範囲があります.

shadowing


変数または関数の定義が見つかった場合、Pythonは以下の順序のscopeで検索されます.
Local => Enclosing => Global => built-in
すなわち、最も狭い有効範囲から、より広い範囲まで、使用する変数または関数の定義を探します.
したがって、同じ名前の変数が異なる範囲で宣言されると、より狭い範囲で宣言されます.
変数(または関数)のより広い範囲の変数を隠す効果が現れた.

Assignment


scope test関数を変更し、パラメータ値を考慮せずに63を無条件に返します.
次の例に示すようにします.
scope_test(10) == 63
scope_test(20) == 63
scope_test(333) == 63
what_is_my_scope = 7 # global scope 선언
def scope_test(what_is_my_scope2):
    some_number = 9 # 함수 내부 선언 
    def inner_scope(what_is_my_scope3):
        return what_is_my_scope * some_number
    return inner_scope(what_is_my_scope2)