scope는 범위라는 뜻이다. 어떠한 객체(변수, 함수 등)가 유효한 범위를 말한다. 항상 객체가 선언된 지점에서 위로는 상위 객체까지, 아래로는 모든 하위객체들과 그 안까지의 범위이다.
Local scope < Inclosing scope < Global scope < Bulit-in scope
주로 함수 안에서 선언된 변수나 함수가 local scope를 가지고 있다. 이러한 변수들은 해당 함수 안에서만 유효하다.
def num():
a = 5 # 함수안에서 선언된 변수이므로 local scope
print(a)
print(a) # 유효범위를 벗어났기 때문에 에러발생
중첩함수가 있을 때 적용되는 scope이다.
def num1():
a = 5
print(a)
def num2():
b = 7
print(a + b) # a는 부모함수인 num1에서 선언. enclosing scope
print(b) # b는 num2함수에서 선언되어 local scope를 가지고 있으므로 범위를 벗어나서 에러 발생
함수 안에서 선언된 것이 아닌 함수 밖에서 선언된 변수나 함수.
선언된 지점이 해당파일 가장 바깥쪽이므로 선언된 지점으로부터 아래로는 어디서나 유효함
c = 9 # 함수 바깥쪽에서 선언되었으므로 global scope
def num1():
a = 5
print(a + c) # c 는 global scope 를 가지고 있으므로 함수 안에서도 유효
def num2():
b = 7
print(a + b - c) # c는 global scope 를 갖고 있으므로 중첩함수 안에서도 유효
print(b)
print(C) # 함수 밖에서 선언했기에 함수 밖에서도 유효
가장 광범위한 scope.
파이썬에 내장되어 있는, 제공하는 함수 또는 속성들의 범위이다. 모든 파이썬 파일 내에서 유효하다.
동일한 이름을 가진 변수가 각기 다른 scope에서 선언이 되면 작은 scope를 가지고 있는 변수가 더 넓은 scope를 가지고 있는 변수를 가리게 된다. 이것을 shadowing이라고 한다.
a = 2
def num():
a = 8 # 함수 num안에서 선언되어 local scope. 동일한 이름인 변수 a=2 를 가리게 됨 -> a = 8 : shadowing
print(a)
print(a) # a = 2