강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

JunHo KANG님의 프로필 이미지
JunHo KANG

작성한 질문수

[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]

flask 깊은 이해를 위한 파이썬 중급 문법: nested function

return을 하게되면 함수가 stack에서 사라지는 걸로 알고 있습니다.

작성

·

175

1

안녕하세요 ! 크롤링 강의 이후에 웹 개발을 하고 싶어서 수강신청을 하게 됐습니다! 자바를 베이스로하고 있다가 파이썬의  신선한 공기를 마시며 왔다 갔다하며 재밌게 공부하고 있습니다 ! 

좋은 강의 감사드린다는 말씀 먼저 드리며 질문 시작하겠습니다 !

9:43초에 해당하는 내용입니다.

fn = outer_function(10)에서 outer_function함수에 인자값으로 10을 줬습니다. 그러면 num에 10이 전달된 것까지 이해했습니다.

결과값을 봤을 때 첫번째 호출에서 입력한 10이 print(num)에도 들어간 것처럼 보여지는데요, inner_func()함수를 호출해주지 않았는데 어떻게 그 안에 값이 들어가는지 이해가 안되네요 ㅠㅠ

그냥 들어가나보다..하기엔 조금 찝찝해서요 !

그리고,

outer_func(10)의 결과값으로 inner_func함수를 리턴해서 fn변수에 저장했습니다.

이때, outer_func(num) 함수가 리턴에 의해서 종료가 되면, 안에 남아있던 num(10)값이나, outer_func(num)메서드도 스텍에서 사라지는 걸로 알고있는데, print(fn())을 실행했을 때 어떻게 10이라는 값이 출력되는지 의아합니다...

답변 1

0

ㅎㅎ 신선한 공기 ㅎㅎ

outer_func(10) 을 호출해주면, 결과적으로 다음과 같은 코드로 해당 함수가 선언이 되고,

   def inner_func():

         print(10)

         return 'complex'

해당 코드로 선언된 inner_func() 객체가 리턴된다고 보시면 좋을 것 같습니다.

그냥 변수로 넣은 값이 inner_func() 안에 값으로 변환되어 선언된다고 보시면 좋을 것 같습니다.

그 객체를 fn 변수가 가지고 있다가, 호출하면, 그대로 위의 10이 출력이 되는 것으로 이해하시면 좋을 것 같습니다.

함수는 보통 함수 호출이 끝나면, 내부 지역변수를 없어지는 것은 맞습니다.

그러나, 실제로 파이썬의 함수는 함수가 아니라 객체입니다. 그래서 객체 자체가 사라지지 않는 이상, 객체 내부의 attribute 는 사라지지 않습니다. 제가 유사한 답변을 이전에도 한 것 같아서, 그 부분도 찾아보셔도 좋고요.

마지막으로 다음 '궁금한 점에 대한 답변 찾기 꿀팁' 글도 읽어보시면, 훨씬 도움이 되실 것 같습니다.
궁금한 점에 대한 답변 찾기 꿀팁
질문하시기 전에, 다음 내용을 확인해주시면 훨씬 도움이 되실꺼예요.
첫번째, 질문 전 검색은 필수! google.co.kr 에서 질문에 대해 검색해보세요!
에러 메시지는 맨 마지막 라인을 복사해서 구글에서 검색해보시고, 질문에 대해서는 질문 관련 키워드들을 조합해서 구글에서 검색해보세요.
개발자들은 모두 이를 통해, 답변을 얻습니다. 한발짝 나아 가시려면, 반드시 이런 연습이 꼭 필요합니다.
사실 검색 없이 질문을 통해, 바로 답을 얻는 부분은 장기적으로는 큰 의미가 없어요. 궁극적으로는 프로그래밍은 답을 찾는 연습을 하셔야 합니다.
저는 한가지 확인이 필요한 사안을 위해, 20 ~ 30분 검색과 10개 이상의 블로그를 찾아보는 일을 하루에도 한두번씩 한답니다.
검색이 처음이신 분들은 개발자를 위한 정보 검색 팁을 참고하시면 훨씬 성장하시는데 도움이 되실 것입니다.
두번째, 각 강의마다, 다른 분들께서도 이미 질문하신 사항들이 있습니다.
해당 부분을 확인해보시면, 답변을 기다릴 필요 없어서, 훨씬 도움이 되실 것 같습니다.
세번째, 각자 작성하신 코드 에러의 경우는
제가 제공해드린 코드자료를 수정하지 않고, 단계별로 그대로 실행해보신 후, 해당 코드와 자신의 코드가 어떤 부분이 다른지를 단계별로 확인해보시면, 훨씬 좋습니다.
키보드로 그대로 따라 치시기 보다, 제공해드린 코드를 그대로 복사해서 붙여넣고 테스트를 해보시면 좋고, 여기에서 자신의 코드와 다른 부분을 최대한 작게 쪼개서 조금씩 넣어보시면서, 테스트를 해보시면 가장 좋습니다. 각자 코드를 작성하신다면, 이렇게 작업해보시면 훨씬 도움이 되실꺼예요.
마지막으로, 질문하실 경우에는 어느 강의 영상의 어느 구간(가능하다면 몇분 몇초)에 대해 질문하시는 것인지 꼭 명기해주시면 좋습니다.
그래야 맥락이 이해가 가서, 보다 좋은 답변할 수 있습니다. 만약 구간 명기가 가능하지 않다면, 강의 영상 외적인 문의인지에 대해 확인 부탁드립니다. 본 질문 답변란은 강의 영상 이해를 돕기 위한 자리입니다. 강의 영상 외적인 부분은 양해를 부탁드립니다. 특히 극히 일부 개인별 코드 리뷰나 기능 구현등 무리가 되는 요청을 하시는 분들도 계셨는데, 좋은 강의가 선순환될 수 있도록 부탁드립니다.
잔재미코딩 Dave Lee 드림

감사합니다.

JunHo KANG님의 프로필 이미지
JunHo KANG

작성한 질문수

질문하기