1. 스코프(scope)
파이썬에서 변수의 범위(scope)는 해당 변수가 프로그램 내에서 참조되고 변경될 수 있는 영역을 의미합니다. 즉, 변수를 활용할 수 있는 범위가 어디까지 인지를 의미합니다. 파이썬의 변수 범위는 크게 네 가지로 분류됩니다.
1.1.Local(지역)
Local scope는 변수가 함수 내에서 정의될 때 해당 함수 내부를 의미합니다.
즉 여기에서 local_var이라는 변수가 local 변수입니다.1.2.Enclosing(둘러싼 범위)
Enclosing scope는 내부 함수에서 외부 함수의 변수에 접근할 수 있도록 하는 개념입니다. 이것은 함수 내부에 다른 함수가 중첩되어 있을 때, 내부 함수가 외부 함수의 변수를 사용할 수 있게 하는 매커니즘입니다. 말 그대로 "Enclosing scope"는 내부 함수가 외부 함수의 범위에 접근할 수 있게 하는 것이며, 이를 통해 변수를 유지하고 공유할 수 있습니다.
1.3. Global(전역 범위)
Global scope는 변수가 스크립트의 최상위 수준에서 정의될 때 전체 스크립트 파일 내에서 해당 변수를 의미합니다. 즉, 변수를 미리 설정할때 스크립트 파일 내에서 def등 다양한 함수 내에서도 해당 변수가 사용 가능함을 의미합니다.
1.3.1. global 함수
전역함수를 변경해 주는 함수로 지역적인 상황에서도 전역변수에 영향을 줄 수 있습니다.
1.4. Built-in(내장 범위)
Built-in scope는 파이썬의 내장 함수와 모듈들이 속하는 범위입니다. 예를 들어, print(), len() 같은 함수들이 여기에 해당됩니다. 바깥쪽, 함수 내부 등등 어디서든 쓸 수 있는 함수입니다.
2. 변수의 범위 탐색 순서
- Local scope
- Enclosing scope
- Global scope
- Built-in scope
따라서 지역 범위에 동일한 이름의 변수가 없으면 파이썬은 둘러싼 범위를 확인하고, 그 다음으로 전역 범위, 마지막으로 내장 범위를 확인합니다.
이렇게 변수의 범위를 이해하고 관리하는 것은 코드의 가독성과 유지 보수성을 높이고, 예기치 않은 오류를 방지하는 데 중요합니다.
하지만 이러한 Built-in scope를 다른 기능을 가진 함수로 덮어씌우게 되면 Built-in scope의 sum()을 쓸때 local scope의 sum() 함수를 삭제해줘야 합니다.
del sum()
이렇게 삭제해준 후에는 sum()을 Built-in 기능 그대로 사용할 수 있습니다.