33.5 연습문제
, 하 새로이님이 작성33.5 연습문제 클로저 내용에 대한 질문이 있습니다.
호출 횟수를 세는 함수에서
def counter():
i = 0
def count():
nonlocal i
i += 1
return i
return count
c = counter()
for i in range(10):
print(c(), end=' ')
이런 식으로 count 함수에서 i를 반환하는 것과
def counter():
i = 0
def count():
nonlocal i
i += 1
print(i)
return count
c = counter()
for i in range(10):
print(c(), end=' ')
count함수에서 i를 출력하면 결과가 다르던데
왜 다른지 궁금합니다
Re: 33.5 연습문제
, 도장_ 관리자님이 작성i 값을 리턴하지 않고 출력하면 결과가 당연히 다르겠지요.
"테이블에 있는 소금을 나한테 줄래?"
라고 했더니 소금을 return하지 않고
바닥에 소금을 뿌려 버린 것과 같습니다.
1 None 2 None 3 None 4 None 5 None 6 None 7 None 8 None 9 None 10print에 문자열을 추가해서 구분해 보면 됩니다.
여기서 출력된 숫자는 c()가 호출되면서 counter 함수 내에서 print(i) 때문에 출력된 것이고, c()의 결괏값은 i가 리턴되지 않으니 리턴 값이 None이니 출력하면 None이 됩니다.
뭔가를 요청할 때마다 테이블 바닥에 버리는 것과 같습니다.