-
TIL. 25 함수의 호출 과정TIL 2020. 11. 2. 21:36728x90
## 함수의 호출 과정 알아보기
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)
실행 결과 30 200
## 아래 사진은 mul 과 add라는 함수를 정의한 스크립트이다
## 해당 이미지는 스크립트를 실행하였을때 (12번) 까지의 결과이며
##현재 add(13번)은 호출되지 않은 상황이라 가정한다.
# 스크립트는 줄 1부터 실행되며 해당 스크립트는 줄 12 까지 실행하면서
전역 프레임(global frame)에 함수 mul, 함수 add, 변수 x , y 가 들어간다
## 여기서 mul, add는 생성만 되었을 뿐 호출된 상태는 아니다.
# 프레임(frame) : 메모리에서 함수와 함수가 속한 변수가 저장되는 독립적인 공간이다.
# 전역 프레임(global frame) : 파이썬 스크립트 전체에서 접근할 수 있어, 전역 프레임이라 부른다.
## add 함수 호출하였을때의 프레임
# add 함수를 실행하였을때의 줄 7 까지의 진행 상항을 프레임으로 확인해보자.
## 입력된 인자를 통해 add 스택 프레임에 c까지 값이 생성된다.
## 위 이미지 다음 mul이라는 함수를 호출할때의 프레임이다.
## add 안에 mul 이라는 함수가 내장되어있기에 줄 3으로 올라가 mul을 실행한다.
## a, b, c 각각 의 값들로 오른쪽과 같은 스택 프레임이 만들어진다.
## mul 함수를 끝낸 고 다시 add함수로 돌아올때의 이미지이다.
# mul 함수를 끝내고 add 함수로 돌아와 mul이라는 함수가 빠진다(스택 프레임 사라짐)
# 동시에 mul 함수의 결과를 변수 d / 200 이 스택 프레임으로 들어간다.
## 줄 9의 print d 를 끝으로 add 함수가 끝나게 되는 이미지
# 줄 9의 print d 를 끝으로 add 함수가 끝나게 되며, add의 스택프레임도 사라지게 된다.
## 함수는 stack (스택)방식으로 호출이 된다.
## 함수를 호출하면 스택의 아래쪽 방향으로 함수가 추가되고, 함수가 끝나면 위쪽 방향으로 사라진다.
## 프레임은 스택 안에 있어서 각 프레임을 스택 프레임이라 부른다.
728x90'TIL' 카테고리의 다른 글
TIL. 27 재귀 호출(recursive call) (0) 2020.11.04 TIL.26 함수 매개변수 및 인수 (0) 2020.11.03 TIL. 24 함수 만들고 사용하기 (0) 2020.11.01 TIL.23 N-gram 만들기 (0) 2020.10.31 TIL. 22 회문 판별하기 (0) 2020.10.30