인프런 커뮤니티 질문&답변
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 는 사라지지 않습니다. 제가 유사한 답변을 이전에도 한 것 같아서, 그 부분도 찾아보셔도 좋고요.
감사합니다.




