16. Scope

  • 어떤 변수, 함수나 객체 등이 적용될 수 있는 범위

  • 범위를 벗어나면 해당 객체는 사용 X

  • Python에서 Scope 는 항상 객체가 선언된 지점에서
    위로는 해당 변수나 객체가 생성된 지점에서 상위 객체까지,
    아래로는 모든 하위 객체들과 그 내부까지가 범위


16-1. Local Scope

def local_scope():
	local var = 1
    print(local_var)

print(local_var) # local_var는 함수 내에서만 호출 가능하므로, 호출이 불가하다.
  • 함수 안에서 선언된 변수나 함수가 local scope를 가지고 있음
  • 이러한 변수들은 해당 함수 안에서만 유효


16-2. Enclosing Scopes

def enclosing_scope():
	enclosing_var = 2
    def inner_func():
    	inner_var = 3
        print(enclosing_var * inner_var) # 6이 나옴
        
    inner_func()
    print(inner_var)
  • enclosing_var이 외부함수에서 정의되었지만, 내부함수에서까지 사용

  • 주로 중첩함수가 정의되어 있을 때 사용되는 scope의 개념

  • 부모 함수에서 선언된 변수는 중첩 함수 안에서도 유효한 범위를 가짐
    외부 함수에서 선언된 변수나 함수는 내부 함수에까지 영향을 줌


16-3. Global Scope

global_var = 10

def outer_func():
	outer_var = global_var + 3
    print(outer_var) # 13 출력
    
    def inner_func():
    inner_var = global_var * 10
    print(inner_var) # 100이 출력

print(global_var) # 10이 출력
  • 함수 안에서 선언된 것이 아닌 함수 밖에서 선언된 변수나 함수

  • 선언된 지점과 동일한 level의 지역, 그리고 더 안쪽의 지역들까지 범위가 유효
    (선언된 지점에 대한 동일 지역 및 그 하위까지 모두 접근이 가능)

  • global scope를 가지고 있는 변수와 함수는 선언된 지점이 해당 파일에서 가장 바깥쪽에 선언되므로,
    해당 파일에서 선언된 지점 아래로는 다 유효한 범위를 갖는다.


16-4. Built-in Scope

  • 가장 광범위한 Scope

  • 파이썬 안에 내장되어 있는, 파이썬이 제공하는 함수 또는 속성들이 built-in scope를 가짐

  • built-in scope는 따로 선언없이 모든 파이썬 파일에서 유효한 범위를 갖음

  • 별다른 선언없이 실행되는 len(), input(), print()와 같은 python 내장 함수


16-5. Shadowing

test_var = 10

def func1():
	test_var = 12
    print(test_var)
    
    def func2():
    	test_var = 100
        print(test_var)
        
print(test_var)

> # 10
> # func1 test: 12
> # func2 test: 100 라고 출력이 됨
  • 변수나 함수의 정의를 찾는 Scope`순서 ::
    Local scope -> Enclosing scope -> Global Scope -> Built-in Scope

  • 가장 좁은 유효범위부터 시작해서 넓은 범위로 나아가며 사용되는 변수나 함수의 정의를 찾음

  • 선언된 변수나 함수의 정의를 찾을 때,
    선언된 지점을 기준으로 가장 가까운 범위부터 찾고, 가장 가까운 범위에 있는 정의를 가장 우선

  • 동일한 이름의 변수들이 서로 다른 scope에서 선언되면 더 좁은 범위에 있는 변수나 함수가 더 넓은 범위에 있는 변수나 함수를 가리는 Shadowing 효과가 나타남

profile
"Your goals, Minus your doubts, Equal your reality"

0개의 댓글