더북(TheBook)

이제 이름 count_nums에 재대입하면 래퍼를 참조하게 되며, count_nums는 기존 count_nums 함수를 호출하겠지만 다르게 동작할 것이다.

아직도 혼란스러운가? 솔직히 처음에는 뇌가 아프기 시작할 것이다. 다시 한 번 이 과정을 되짚어 보자. (1) 기존 함수는 런타임 시점에 기능이 추가되어 새롭게 생성되며, (2) 새롭게 생성된 함수는 count_nums로 참조할 수 있게 되는 것이다. 파이썬 심벌은 함수(호출이 가능한 객체)를 포함한 어떤 객체도 참조할 수 있다. 그러니 원하는 함수 이름을 재대입할 수 있는 것이다.

count_nums = wrapper

혹은 더욱 상세하게 표현할 수도 있다.

count_nums = make_timer(count_nums)

이제 (래핑된 버전의 함수를 참조하고 있는) count_nums를 실행하면 다음과 같이 실행 시간이 출력될 것이다.

>>> count_nums(33000)
Time elapsed was 1.063697338104248

기존 버전의 count_nums는 숫자를 세는 것 이외의 작업은 하지 않지만, 래핑된 버전은 기존 버전의 count_nums를 호출하여 수행되는 시간을 보고한다.

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