• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

클로저 관련 질문

23.02.21 18:01 작성 조회수 246

0

안녕하세요

클로저 부분 설명이 이해가 가지 않아 질문드립니다!
위 코드에서

base_number가 10인것은 이해가 갑니다만,

함수안에서 number에 대한 변수 선언이 없고,

return_fn이 선언될때도 number에 대한 지정하는 부분이 없는데

return_fn(3)에서 number가 3이라는 것을 어떻게 아는것인지 궁금합니다.

 

답변 2

·

답변을 작성해보세요.

1

김링크님의 프로필

김링크

질문자

2023.02.24

code.png답변 감사합니다!
예제 코드로 이리저리 테스트 해보았습니다.
강사님 코멘트 처럼 처음 인자가 넘어가는 것은 return_fn함수가 호출될때 넘어가고, 넘겨 받는 경우는 make_double함수의 return 값에 들어있는 함수(사진상 new_fn2)가 받게 되는것을 확인 했습니다.
추가적으로 인자를 넘기는 시점에서 파이썬에서 확인하고 인자의 수가 맞지 않으면 오류를 발생시킵니다.
그리고 인자에 대해 따로 인자 이름을 지정하지 않으면 순서대로 들어가고 이름을 지정하면 이름에 맞게 들어가는것 까지 확인 했습니다.
친절한 답변 감사합니다.

잘 해결하셨습니다.

화이팅입니다. ;-)

1

안녕하세요.

make_double 함수 내에서
new_fn1 함수가 make_double 함수가 호출될 때마다 새롭게 생성이 되며,
new_fn2 함수 역시 make_double 함수가 호출될 대마다 새롭게 생성이 됩니다.
number는 new_fn1 함수와 new_fn2 함수의 인자입니다.

def new_fn2(number):
...

그래서, 위 함수 정의가 있다면 new_fn2(3) 처럼 호출이 될 때 인자 3이 number에 대입이 되어 new_fn2 함수가 수행됩니다.

return_fn(3) 코드는 return_fn 함수를 호출할 때 인자 3을 넘긴 것입니다.

인자는 return_fn 함수를 호출할 때 지정하기 나름입니다.
return_fn(3) 처럼 인자 3으로 호출하면 10 + 3 ** 2가 계산이 되어 19를 반환하는 것이고
return_fn(5) 처럼 인자 5로 호출하면 10 + 5 ** 2가 계산이 되어 25를 반환합니다.

차근차근 살펴보시고 또 질문남겨주세요.

화이팅입니다. :-)