ko ko ko en en en ko ko cs zh ko ko ko ko ko ko ko ko en en ko nb ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko fr ko ko ko en en ko en zh en en
파이썬 코딩 도장: 29.5 함수의 호출 과정 알아보기
◀ 29.4 함수에서 값을 여러 개 반환하기29.6 퀴즈 ▶︎
지금까지 함수를 만드는 방법을 알아보았습니다. 이번에는 함수 여러 개를 만든 뒤에 각 함수의 호출 과정을 스택 다이어그램(stack diagram)으로 알아보겠습니다. 스택은 접시 쌓기와 같은데 접시를 차곡차곡 쌓고 꺼낼 때는 위쪽부터 차례대로 꺼내는 방식입니다(단, 중간에 있는 접시는 뺄 수 없습니다). 파이썬에서는 접시 쌓기와 방향이 반대인데, 함수가 아래쪽 방향으로 추가되고 함수가 끝나면 위쪽 방향으로 사라집니다.
다음은 덧셈 함수 add와 곱셈 함수 mul이 있고, add 함수 안에서 mul 함수를 호출하는 방식으로 만들어져 있습니다.
def mul(a, b):     c = a * b     return c   def add(a, b):     c = a + b     print(c)     d = mul(a, b)     print(d)   x = 10 y = 20 add(x, y)
소스 코드를 알아보기 쉽도록 줄 번호를 붙였습니다. 먼저 파이썬 스크립트를 실행하면 줄 1부터 실행합니다. 여기서 줄 12 y = 20까지 실행하면 전역 프레임(global frame)에는 함수 mul, add 변수 x, y가 들어갑니다(함수 mul, add는 생성만 되었을 뿐 호출이 되지 않은 상태입니다).
▼ 그림 29-5 전역 프레임
프레임이란 메모리에서 함수와 함수에 속한 변수가 저장되는 독립적인 공간입니다. 특히 전역 프레임은 파이썬 스크립트 전체에서 접근할 수 있어서 전역 프레임이라 부릅니다.
이제 함수 add를 호출한 뒤 안으로 들어가서 줄 7 print(c)까지 실행하면 다음과 같은 모양이 됩니다. 즉, 함수 add의 스택 프레임이 만들어지고 매개변수 a와 b 그리고 변수 c가 들어갑니다.
▼ 그림 29-6 함수 add의 스택 프레임
여기서 함수 mul을 호출한 뒤 안으로 들어가서 줄 3 return c까지 실행하면 함수 mul의 스택 프레임이 만들어지고 매개변수 a와 b 그리고 변수 c가 들어갑니다.
▼ 그림 29-7 mul 함수의 스택 프레임
이제 줄 9 print(d)까지 실행해서 함수 mul을 끝내고 함수 add로 되돌아 갑니다. 이렇게 하면 mul에서 반환한 반환값 200이 변수 d에 저장되며 add의 스택 프레임에 들어갑니다. 물론 mul은 끝났으므로 스택 프레임도 사라집니다.
▼ 그림 29-8 mul 함수가 끝남
그다음에 줄 13 add(x, y)까지 실행해서 함수 add를 끝냅니다. 이렇게 하면 add의 스택 프레임도 사라집니다.
▼ 그림 29-9 add 함수가 끝남
지금까지 설명한 과정처럼 함수는 스택(stack) 방식으로 호출됩니다. 즉, 함수를 호출하면 스택의 아래쪽 방향으로 함수가 추가되고 함수가 끝나면 위쪽 방향으로 사라집니다. 특히 프레임은 스택 안에 있어서 각 프레임을 스택 프레임이라고 부릅니다.
참고로 전역 프레임은 스크립트 파일의 실행이 끝나면 사라집니다.
지금까지 함수를 만드는 방법과 호출하는 방법을 배웠습니다. 앞으로 파이썬 프로그래밍을 하면 함수를 만들고 호출할 일이 많이 생깁니다. 함수는 중요한 부분이므로 함수를 만드는 방법, 반환값을 사용하는 방법, 함수를 호출하는 방법은 꼭 익혀 두기 바랍니다.
◀ 29.4 함수에서 값을 여러 개 반환하기29.6 퀴즈 ▶︎
Unit 1. 소프트웨어 교육과 파이썬
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수와 입력 사용하기
Unit 7. 출력 방법 알아보기
Unit 8. 불과 비교, 논리 연산자 알아보기
Unit 9. 문자열 사용하기
Unit 10. 리스트와 튜플 사용하기
Unit 11. 시퀀스 자료형 활용하기
Unit 12. 딕셔너리 사용하기
Unit 13. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 14. else를 사용하여 두 방향으로 분기하기
Unit 15. elif를 사용하여 여러 방향으로 분기하기
Unit 16. for 반복문으로 Hello, world! 100번 출력하기
Unit 17. while 반복문으로 Hello, world! 100번 출력하기
Unit 18. break, continue로 반복문 제어하기
Unit 19. 계단식으로 별 출력하기
Unit 20. FizzBuzz 문제
Unit 21. 터틀 그래픽스로 그림 그리기
Unit 22. 리스트와 튜플 응용하기
Unit 23. 2차원 리스트 사용하기
Unit 24. 문자열 응용하기
Unit 25. 딕셔너리 응용하기
Unit 26. 세트 사용하기
Unit 27. 파일 사용하기
Unit 28. 회문 판별과 N-gram 만들기
Unit 29. 함수 사용하기
29.1 Hello, world! 출력 함수 만들기
29.2 덧셈 함수 만들기
29.3 함수의 결과를 반환하기
29.4 함수에서 값을 여러 개 반환하기
29.5 함수의 호출 과정 알아보기
29.3 연습문제: 몫과 나머지를 구하는 함수 만들기
29.4 심사문제: 사칙 연산 함수 만들기
Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기
Unit 31. 함수에서 재귀호출 사용하기
Unit 32. 람다 표현식 사용하기
Unit 33. 클로저 사용하기
Unit 34. 클래스 사용하기
Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기
Unit 36. 클래스 상속 사용하기
Unit 37. 두 점 사이의 거리 구하기
Unit 38. 예외 처리 사용하기
Unit 39. 이터레이터 사용하기
Unit 40. 제너레이터 사용하기
Unit 41. 코루틴 사용하기
Unit 42. 데코레이터 사용하기
Unit 43. 정규표현식 사용하기
Unit 44. 모듈과 패키지 사용하기
Unit 45. 모듈과 패키지 만들기
Unit 46. 실전예제: 웹의 데이터로 그래프 그리기
C 언어 코딩 도장
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang