어떤 변수, 함수나 객체 등이 적용될 수 있는 범위
범위를 벗어나면 해당 객체는 사용 X
Python에서 Scope 는 항상 객체가 선언된 지점에서
위로는 해당 변수나 객체가 생성된 지점에서 상위 객체
까지,
아래로는 모든 하위 객체들과 그 내부
까지가 범위
def local_scope():
local var = 1
print(local_var)
print(local_var) # local_var는 함수 내에서만 호출 가능하므로, 호출이 불가하다.
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
의 개념
부모 함수에서 선언된 변수는 중첩 함수 안에서도 유효한 범위를 가짐
외부 함수에서 선언된 변수나 함수는 내부 함수에까지 영향을 줌
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를 가지고 있는 변수와 함수는 선언된 지점이 해당 파일에서 가장 바깥쪽에 선언되므로,
해당 파일에서 선언된 지점 아래로는 다 유효한 범위를 갖는다.
가장 광범위한 Scope
파이썬 안에 내장되어 있는, 파이썬이 제공하는 함수 또는 속성들이 built-in scope를 가짐
built-in scope
는 따로 선언없이 모든 파이썬 파일에서 유효한 범위를 갖음
별다른 선언없이 실행되는 len()
, input()
, print()
와 같은 python 내장 함수
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
효과가 나타남