이름은 LEGB 순서로 찾는다
Python은 현재 함수의 Local, 감싸는 함수의 Enclosing, 모듈의 Global, 내장 이름 Built-in 순서로 이름을 찾아. 안쪽에서 이름에 대입하면 기본적으로 새 지역 이름을 만드는 점이 중요해.
클로저는 바깥 바인딩을 붙잡는다
함수 안에서 만든 함수가 바깥 함수의 이름을 사용하면, 바깥 호출이 끝난 뒤에도 그 바인딩을 기억해. 설정을 담은 함수나 작은 상태 기계를 클래스 없이 만들 수 있어.
nonlocal과 global
nonlocal은 가장 가까운 감싸는 함수의 이름을 다시 묶고, global은 모듈 이름을 다시 묶어. 모듈 전역 변경은 의존성을 숨기기 쉬우므로 드물게 써야 해.
반복문에서 만든 클로저의 늦은 바인딩
클로저는 값을 복사하기보다 이름을 기억하므로, 반복이 끝난 뒤 모두 마지막 값을 볼 수 있어. 기본 인자나 별도 팩토리 호출로 각 차례의 값을 고정해.