더북(TheBook)

데이터 얻어오기

파이썬 3에는 클로저에서 데이터를 얻어오는 특별한 문법이 있다. nonlocal 문은 특정 변수 이름에 할당할 때 스코프 탐색이 일어나야 함을 나타낸다. 유일한 제약은 nonlocal이 (전역 변수의 오염을 피하려고) 모듈 수준 스코프까지는 탐색할 수 없다는 점이다.

다음은 nonlocal을 사용하여 같은 함수를 다시 정의한 예다.

def sort_priority3(numbers, group):

found = False

def helper(x):

nonlocal found

if x in group:

found = True

return (0, x)

return (1, x)

numbers.sort(key=helper)

return found

 

nonlocal 문은 클로저에서 데이터를 다른 스코프에 할당하는 시점을 알아보기 쉽게 해준다. nonlocal 문은 변수 할당이 모듈 스코프에 직접 들어가게 하는 global 문을 보완한다.

하지만 전역 변수의 안티패턴(anti-pattern)과 마찬가지로 간단한 함수 이외에는 nonlocal을 사용하지 않도록 주의해야 한다. nonlocal의 부작용은 알아내기가 상당히 어렵다. 특히 nonlocal 문과 관련 변수에 대한 할당이 멀리 떨어진 긴 함수에서는 이해하기가 더욱 어렵다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.