개발자 블로그

Variable Scope 본문

파이썬/알쓸신잡

Variable Scope

hayongwoon 2022. 6. 27. 18:13

전역 변수는 주로 변하지 않는 고정 값에 사용

지역 변수는 사용 이유: 지역 변수는 함수 내에 로직 해결에 국한, 소멸주기: 함수 실행 해제 시

 

내가 선언한 변수의 스코프는 적절한지 알고 사용하자. 한번만 선언해도 참조하여 쓸 수 있었는데 여러 곳에서 산발적으로 선언하여 메모리를 불필요하게 사용하진 않았는지 이러한 성능에 대한 고민을 할 필요가 있다.

 

Global

 전역 변수를 지역 변수 스코프에서 수정을 하려고 하면 UnboundlocalError를 만난다. 그럴 때 해당 변수를 global로 해당 변수를 지역 내로 불러와 사용할 수 있다. 

하지만, 전역 변수를 지역 내에서 수정 되는 것은 지양해야한다. 코드의 수가 몇만줄 또는 여러 사람들과 협업을 해야할 시 다소 혼잡성을 야기할 수 있다.

 

Nonlocal

데코레이션 함수를 떠올려 보자. 클로져 함수(함수 내부에 있는 함수)의 경우, 함수 내에서 지역 범위의 변수를 설정하고 해당 변수를 클로져 함수에서 선언이 필요할 때, 쓰는 것이 바로 nonlocal 이다. 

UnboundLocalError exaple. nonlocal

inner()함수를 호출하기 위해선 상위 함수를 선언하고 그 함수를 객체로 다시 함수를 선언하는 식으로 실행할 수 있다. 위 함수는 UnboundLocalError를 만나게 되는 함수이고 이를 해결하기 위해선 아래와 같이 작성할 수 있다. inner함수 안에 nonlocal 을 사용하여 상위 함수에 있는 변수를 불러와 수정할 수 있다.

nonlocal 사용 예시
실행 결과

Locals

locals()는 해당하는 함수 내부의 사용되고 있는 지역 변수들을 모두 확인할 수 있다. 파이썬에서는 딕셔너리 형태로 key는 변수, value는 해당 값으로 저장하는 것을 볼 수 있다. 

func 함수 내부의 변수들

y 변수의 경우 printer라는 클로져 함수에서 사용되는 변수로 해당 locals()에 선언된 위치에는 변수로 설정이 안되어 있다. 그리고 printer 함수도 하나의 객체로 변수로 선언되어 있는 것을 확인할 수 있다.

 

Globals

globals()라는 함수를 사용하여 딕셔너리 형태의 결과값을 확인할 수 있다. 해당하는 파일의 전역 변수를 확인할 수 있다. key, value형태로 이루어져 있기 때문에 mutable한 성질을 활용하여 직접 변수를 관리할 수도 있다.

 

 

*이러한 디테일들을 잘 활용하여 파이썬을 효율적으로 사용하는 개발자가 되어보자.