[Python] 함수 정의 def (User-Defined Function)
함수(function)는 input을 받아서 특정 과업(들)을 수행하여 output을 반환하도록 짜여진, 잘 조직되고 재사용이 가능한 코드 블록을 말합니다.
그동안 파이썬의 내장형 함수(Built-in function), 여러 라이브러리의 함수에 대해서 소개를 했었는데요, 이번 포스팅부터는 사용자가 직접 함수를 정의해서 사용할 수 있는 '사용자 정의 함수 (User-Defined Function, UDF)' 에 대해서 소개하겠습니다.
[ 사용자 정의 함수의 유용성 ]
* 사용자 정의 함수를 재사용(reusable)할 수 있습니다.
* 코드를 구조화, 모듈화(modularization) 함으로써 관리하기 쉽습니다.
* 사용자 정의 함수를 사용하여 코드를 간결하게 하고 가독성을 높일 수 있습니다.
* 사용자 정의 함수를 분산해서 개별적으로 작성할 수 있으므로 애플리케이션 개발 속도를 높일 수 있습니다.
사용자 정의 함수는 (1) 사용자 정의 함수의 정의 (Definition), (2) 호출 (Call), (3) 반환 (Return) 의 절차를 따라서 이용할 수 있습니다.
사용자 정의함수를 정의(define) 할 때는
- 첫 줄에는 def 로 시작하며
- 사용자 정의 함수 이름을 쓰고,
- 괄호 안에는 매개변수 목록을 쓰며,
- 콜론(:)을 써줍니다.
- 다음줄 부터는 들여쓰기(indentation)을 꼭 해주어야 하며,
- 따옴표 세개("""함수 설명""")로 함수에 대한 부가 설명(Docstring)을 넣어주고 (optional)
- 실행하고자 함는 작업에 대해서 코드블록을 작성합니다.
- 마지막에 return 뒤에 반환하고자 하는 결과값을 써주면 됩니다.
- 반환할 값이 없으면 return 은 생략 가능합니다.
(1) 숫자를 input으로 받아서 평균을 반환하는 간단한 사용자 정의 함수를 정의(define)해보겠습니다.
def my_avg(x1, x2): avg_val = (float(x1) + float(x2))/2
return avg_val
|
(2) 위에서 만든 my_avg() 라는 사용자 정의 함수를 호출(call)하여 (2, 3), (2, 4) 의 두 쌍의 숫자들의 평균을 반환(return) 해보겠습니다.
In [2]: avg_val = my_avg(2, 3) In [3]: avg_val Out[3]: 2.5
In [4]: my_avg(2, 4) Out[4]: 3.0
|
큰 따옴표 세개(""" Docstring """)로 사용자 정의 함수를 설명하는 Docstring을 추가하고, ?함수이름으로 Docstring을 불러와서 참고해보겠습니다.
def my_avg(x1, x2): """ This function calculates average value of two numbers x1: first input number x2: second input number """ avg_val = (float(x1) + float(x2))/2
return avg_val
In [6]: ?my_avg() Signature: my_avg(x1, x2) Docstring: This function calculates average value of two numbers x1: first input number x2: second input number File: c:\users\admin\<ipython-input-5-d14cc1c6028b> Type: function
|
사용자 정의 함수의 코드 블록에 if ~ else 조건문을 추가하여 좀더 복잡한 작업을 할 수도 있습니다. 위의 두 숫자를 input으로 받아서 평균을 반환하는 사용자 정의 함수에다가 '정수(integer) 혹은 부동소수형(float)'이 아니면 "This is not a number" 라는 메시지를 반환하도록 하는 조건문 코드를 추가해보겠습니다.
사용자정의함수와 조건문을 같이 쓰므로 콜론(:)으로 코드블록이 시작됨을 알려주고 들여쓰기(indentation)에 주의를 기울여야 합니다.
def my_avg(x1, x2): """ This function calculates average value of two numbers x1: first input number x2: second input number """
if isinstance(x1, (int, float)) and isinstance(x2, (int, float)): avg_val = (float(x1) + float(x2))/2 return avg_val else: print("This is not a number")
In [8]: my_avg(2, 5) Out[8]: 3.5 In [9]: my_avg('2', 5) This is not a number
|
많은 도움이 되었기를 바랍니다.