Function call은 함수를 호출하여, 해당 함수를 실행하는 것을 의미한다.
- Python에서는 다양한 built-in function을 제공하고 있으며, third-party에서 제공하는 library의 함수들까지 고려한다면, application을 만드는데 필요한 기반 function들은 이미 다 제공되고 있다고 생각해도 된다.
- 사실 programming에서 중요한 능력 중 하나가 기본에 제공되는 기능들을 조합하여 내게 필요한 기능을 구현하는 것이므로 function call에 대한 확실한 이해가 필요하다.
Function call의 일반적인 형태는 다음과 같음.
function_name (arguments)
- function call에서는 arguments가 0개 이상 사용할 수 있다. (0개도 포함되는 것을 기억하자)
- function name은
def
다음에 주어진 함수의 이름이며 중간에 여백문자 등이 사용될 수 없음
Function call에서의 규칙은 다음과 같음.
- function call에서 가장 먼저 수행되는 부분은 argument들의 evaluation임.
- 각 argument들은 comma로 구분이 됨.
- argument들은 각각 expression으로 function call이 이루어지면 우선 결과값으로 reduction됨.
- argument evaluation은 왼쪽에서 오른쪽으로 이루어짐.
- 이들 argument들의 각각의 결과값들은 function의 대응하는 parameter들에 할당됨.
- 이 후 function이 실행(execution)되며, 하나의 반환값을 return하고 종료됨.
argument로 expression이 주어지는 것과 비슷하게,
Return value가 있는 Function call은 일종의 expression이라고 생각할 수 있으며,
이 경우 특정 expression의 subexpression으로 사용될 수 있음.
다음은 $\langle 2,3,-1 \rangle$의 L-2 norm을 구하는 expression임.
import math
def sqrt_sum( e0, e1, e2):
sum = e0+e1+e2
return math.sqrt(sum)
# pow(2,2), pow(3,2), pow(-1,2) 순으로 evaluation이 이루어지고 sqrt_sum가 수행됨.
l2 = sqrt_sum( pow(2,2), pow(3,2), pow(-1,2))
print(l2)
# 다음의 test도 l2와 같은 값을 가짐. (subexpression으로 function call이 활용됨.)
test = pow(2,2)+pow(3,2)+pow(-1,2)
print(test)
# print()는 return value가 없으므로 None이 할당됨.
a = print('test')
print (a == None)
함수 호출이 이루어지면, Python 에서는 해당 함수를 위한 새로운 namespace (function namespace)가 생성되고,
여기에 함수와 관련된 parameters와 local variables이 놓이게 된다.
해당 namespace (function namespace)는
- 호출될 때마다 생성되며
- Shell에서 관리되는 global variable들이나 함수 이름들이 들어가 있는 namespace(global namespace)와 구분된다.
단, 해당 function call이 끝나면 해당 function namespace는 사라진다.
다음 URL에서는 stack과 stack frame, namespace 등에 대한 보다 자세한 설명들이 있으므로 참고할 것.
2023.06.11 - [Programming] - [Basic] namespace, frame, and context
2023.06.10 - [Programming] - [Python] Function Definition, Call and Arguments
'Programming' 카테고리의 다른 글
[Python] Comments and Docstrings (0) | 2023.06.11 |
---|---|
[Basic] namespace, frame, and context (0) | 2023.06.11 |
[Python] Function Definition, Call and Arguments (0) | 2023.06.10 |
[Python] Python Interactive Shell (or Python Interactive Prompt) (0) | 2023.06.09 |
[Python] Python Script File 실행해보기 (0) | 2023.06.09 |