Python

사용자 정의 함수(def)

김아다만티움 2021. 11. 25. 00:23

*본 게시물은 21-2학기 연세대학교 일반대학원 온라인데이터수집과분석(이상엽 교수님) 수업 내용을 정리한 것입니다.

 

 

  파이썬에는 2가지 함수가 존재합니다. 하나는 기본 제공 함수(built-in function)이고, 다른 하나는 사용자 정의 함수(user-defined function)입니다.

  빌트인 함수는 print(), len()같이 사용자가 별도의 정의를 내리지 않고도 파이썬에서 사용할 수 있는 기본 함수를 말합니다. 사용자 함수는 기본 제공 함수로 반복 task를 수행할 수 없을 때 정의하는 함수라 할 수 있습니다. 

 

 

사용자 정의 함수는 define으로 생성할 수 있습니다. ①함수 이름, ②파라미터(함수에서 사용될 변수), 실제 ③동작문(body) 그리고 return이라는 ④함수의 반환값으로 구성됩니다. 따라서 사용자 정의 함수는 다음과 같이 생겼음을 알 수 있습니다.

1
2
3
def function_name(param1, param2...):
    body
    return xxx
cs

 

def(ine) 뒤에 함수 이름이 오고, 괄호 안에 파라미터가 오고, body라는 동작문, 그리고 return이라는 반환값이 있음을 확인할 수 있습니다. 실제 사용자 정의함수를 사용하는 방법은 아래와 같습니다.

1
2
3
4
5
6
7
8
# 위의 기본 사용자 함수꼴을 사용해서 만들어본다면...
 
def subtract(x,y):
    s = x - y
    retun s
 
#만든 함수를 작동시켜 본다면?
subtract(105# 값은 5가 반환됩니다.
cs

함수를 작동시킬 때는 def에서 파라미터로 지정했던 갯수랑 똑같은 인자가 들어와야 합니다! 만일 동일 갯수의 인자가 들어오지 않으면 "TypeError: 함수이름() missing 1 required positional argument: 'param'"이라는 경고가 표출됩니다.

 

 

함수의 body에는 보다 복잡한 내용들이 들어갈 수도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# for문을 사용한 사용자 정의 함수
def add_numbers(x):
    total = 0
    for i in x:
        total = total + i
    return total
 
# 위의 함수를 숫자로 구성된 리스트에 적용한다면?
= [1,2,3]
 
add_numbers(x)
# 일단 total 0인 상태에서 시작하게 됩니다.
# x라는 리스트 안에 원소 i가 있을 때 total과 더하게 되므로
# 일단은 0+1
# 다음은 total이 1인 상태에서 다음 리스트 원소인 2와 더해져서 3
# total이 3인 상태에서 다시 for문이 도므로 x안의 3까지 더해집니다
# 따라서 최종 반환값은 6
cs

 

 

숫자 뿐만 아니라 다른 명령어도 가능합니다. 아래 함수는 이상엽 교수님 수업 자료에 있는 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
# 문장에 단어가 몇 개 있는지 세는 간단한 함수를 작성한다고 생각합니다.
# 전처리는 우선 끝에 있는 공백을 없애고, 마침표를 없애는 것부터 시작합니다.
# 다음으로는 공백을 기준으로 문장을 잘라줍니다. 
# 잘려진 단어(어절)의 갯수를 len()으로 셉니다
 
def count_words(text):
    cleaned_text = text.strip().replace('.''')
    cleaned_text = cleaned_text.split()
    return len(cleaned_text)
 
text = 'Today is a good day.'
count_words(text) # ['today', 'is', 'a', 'good', 'day']의 길이인 5가 반환됩니다.
cs

 

 

여기서부터는 다양한 함수의 예시입니다. 연습 겸 복습 겸 작성해보았습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
### 숫자가 0보다 큰 지 아닌 지를 리턴하는 함수 ###
def bigger(a):
    if a > 0:
        print(a, '은/는 0보다 큽니다')
 
bigger(100# 100 은/는 0보다 큽니다.
 
 
 
### 둘을 더해주는 함수 ###
def summation(a,b):
    summ = a+b
    return summ
 
summation(100009# 100009
summation(a=10000, b=9#혹은 이렇게도 함수를 사용할 수 있습니다.
 
 
 
### 빼기 함수, 그런데 파라미터에 기본값을 지정한다면? ###
def subtract(x,y = 0):
    res = x - y
    return res
 
subtract(7,4# 3 리턴
# y= 0이 작동되지 않은 이유는 인자에 4를 넣음으로써 새로 y값이 할당되었기 때문입니다.
# 다만 아래와 같이 인자를 하나만 넣는다면 y = 0이 유지가 됩니다
# 인자를 하나만 넣어도 가능한 이유는 y에 0이 버티고 있기 때문입니다 ^^ㅋㅋ
subtract(3# 3 - 0 = 3
cs