33.5 연습문제: 호출 횟수를 세는 함수 만들기

다음 소스 코드를 완성하여 함수 c를 호출할 때마다 호출 횟수가 출력되게 만드세요. 여기서는 함수를 클로저로 만들어야 합니다.

practice_closure.py

def counter():
    i = 0
    def count():
                       
        ...
                       
 
c = counter()
for i in range(10):
    print(c(), end=' ')

실행 결과

1 2 3 4 5 6 7 8 9 10 

정답

        nonlocal i
        i += 1
        return i
    return count

해설

함수 counter를 호출해서 반환값을 c에 저장한 뒤에 c를 호출하고 있습니다. 그리고 c를 호출할 때마다 값이 계속 유지되게 하려면 함수를 클로저로 만들어야 합니다.

함수 counter에서는 지역 변수 i에 0이 할당되어 있고, 함수 count가 만들어져 있습니다. 따라서 count에서 i에 1을 더한 값을 저장한 뒤 i를 반환합니다. 이때 nonlocal을 사용하여 함수 바깥쪽의 지역 변수 i를 변경할 수 있도록 만들어야 합니다.

마지막으로 함수 counter에서 함수 count를 반환하면 됩니다(함수를 반환할 때는 함수 이름만 반환해야 하며 ( )(괄호)를 붙이면 안 됩니다).