scope는 파이썬에서 굉장히 중요한 개념이라고 생각된다.
이 개념을 제대로 이해하지 못한다면 원하는 결과값을 못 얻을 수도 있다.
중요한 개념인만큼 꼼꼼히 정리해보자! 📝
변수나 함수는 선언된 지점과 동일한 level의 지역, 그리고 더 안쪽의 지역들까지 범위가 유효하다.
💡
dir()
해당 객체가 어떤 변수와 메소드를 갖고 있는지 나열해준다.
local scope를 가지고 있는 변수나 함수 혹은 객체는 이름 그대로 특정 범위에서만 유효하다.
a = 10
def callNum():
#함수 안에서 선언되었으므로 함수 안에서만 유효한 변수
a = 20
print(a)
callNum() #20
print(a) #10
중첩함수가 있을 때 적용되는 scope
부모 함수에서 선언된 변수는 중첩함수 안에서도 유효한 범위를 가지고 있다.
def outer():
a = 10
def inner():
#부모함수에서 선언된 a 변수 사용가능하다.
b = 20
print(a + b)
inner()
print(b) #error 발생
선언된 지점이 해당 파일에서 가장 바깥쪽에서 선언되므로 전역변수라 한다.
해당 파일에서 선언된 지점 아래로는 다 유효한 범위를 가짐.
print(a) #error 발생
a = 10
print(a + 10)
#출력결과
#20
파이썬이 제공하는 함수 또는 속성들이 built-in scope를 가진다.
따로 선언 없이 모든 파이썬 파일에서 유효한 범위를 가진다.
numbers = list(range(1, 11))
print(len(numbers))
#출력결과
#10
💡 파이썬은 변수나 함수의 정의를 찾을 때 다음 순서의 scope 안에서 찾는다.
🚗 local → enclosing → global → built-in
참고자료: 코딩도장