Python/파이썬 기초

파이썬 def 함수 선언 case 총정리 (argument, return)

jimmy_AI 2021. 12. 3. 15:57
반응형

def로 파이썬에서 함수를 선언하는 경우는 원하는 기능을 반복 사용하는 경우 등에서 매우 간결한 코딩을 도와주는 핵심적인 기능입니다.

 

이번 글에서는 def로 함수를 선언하는 케이스에 대해서 input과 output의 형태를 기준으로 삼아 간단한 예제들을 다루어보겠습니다.

 

파이썬 def 케이스 정리

1. input, output 둘다 없는 경우

먼저 가장 간단한 케이스인 input, output이 둘다 없는 경우입니다.

def func_a():
    print('안녕하세요.')

# 안녕하세요. 3번 출력
a = func_a() # a에는 None 반환
func_a()
func_a()

print(a) # None

이 경우 함수 내의 print 문은 실행되지만, 반환 값이 없기에 다른 변수에 결과를 받으려하면 None이 반환됩니다.

 

2. input은 없고, output은 있는 경우

이번에는 input은 없는 대신, output만 있는 경우입니다.

def func_b():
    print('안녕하십니까?')
    return 3

# 안녕하십니까? 가 출력되고 b에는 3 저장
b = func_b()

print(b) # 3

이 때는 print문이 실행된 이후에 다른 변수에 결과를 받으면 항상 3이라는 고정된 값을 받을 수 있게됩니다.

 

3. input, output 둘다 있는 경우

가장 많이 사용되는 케이스인 input, output이 둘 다 있는 경우를 보겠습니다.

def func_c(a, b):
    print('두 숫자를 더합니다.')
    return a + b

# 두 숫자를 더합니다.가 출력되고 c에는 6 저장
# a변수에 1, b변수에 5를 할당하는 경우
c = func_c(1, 5)
# c = func_c(b = 5, a = 1) 식으로도 가능

print(c) # 6

a, b 두개의 변수로 input 2개를 받아 두 변수의 합이 출력됩니다.

이 때, 매개변수로 b = 5, a = 1 처럼 지정해서 받는 것도 가능하며,

따로 매개변수를 써주지 않으면 함수 선언 시 지정한 순서(a, b)대로 input을 받게 됨을 참고해주시면 됩니다.

이 경우는 input을 다르게 넣으면 output도 다른 값을 받을 수 있습니다.

 

4. input만 있는 경우

def func_d(a):
    print('입력하신 숫자는 %d 입니다.'% a)

# 입력하신 숫자는 10입니다. 가 출력되고 d에는 None 저장
d = func_d(10)

print(d) # None

이번에는 input만 있는 경우 예시입니다. print 문에서 input으로 받은 값을 기준으로 출력한 뒤(input으로 받은 변수를 사용하지 않아도 error가 발생하지는 않습니다.), 반환하는 값은 없으므로, 변수에 값을 반환하려고 해도 None이 반환될 것입니다.

반응형

5. output이 여러개인 경우

def func_e(a, b):
    print('두 숫자의 합과 차를 반환합니다.')
    return a + b, a - b

e = func_e(4, 2) # e = (6, 2) 튜플 형태 반환
e, f = func_e(4, 2) # e = 6, f = 2로 2개 변수에 나눠서 반환

이 경우는 3번 케이스에서 output이 2개 이상인 경우입니다.

출력값이 2개이지만, 1개의 변수에 튜플 형태로 결과를 모두 담아서 받을 수 있습니다. 혹은, 2개 변수에 각 출력 값을 나눠서 받을 수 있습니다.

 

6. input 개수가 불확실한 경우

input 개수가 불확실한 경우도 있을 수 있습니다. 이 경우는 다음과 같이 해당 인자에 *를 붙여서 선언해주면 됩니다.

def func_f(*a):
    sum = 0
    for i in a:
        sum += i
    return sum

f = func_f(1, 2, 3) # 1 + 2 + 3 = 6
f = func_f(1, 2, 3, 4) # 1 + 2 + 3 + 4 = 10

위 코드로 3개, 4개로 input의 개수를 다르게 받더라도 모두 a 변수에 튜플 형태로 모아서 함수에서 처리하게 되는 예제를 확인할 수 있습니다.

 

7. 고정 input과 input 개수가 불확실한 경우 혼합

고정된 입력 인자와 6번 케이스에서 다룬 input 개수가 불확실한 경우를 혼합하여 input으로 받으려는 경우입니다.

def func_g(a, *b): # def func_g(*a, b) 순서는 불가
    if a == 'sum':
        return func_f(*b) # 함수로 호출 가능
    else:
        return 0

g = func_g('sum', 1, 2, 3) # 1 + 2 + 3 = 6
g = func_g('del', 1, 2) # 0

첫 번째 인자는 고정적으로 a 변수에 할당되게 됩니다. 그 뒤, 두번째 인자부터는 b 인자에 튜플 형태로 모아서 함수에서 처리하게 됩니다. 이 때, *를 붙인 인자는 고정 입력 argument가 모두 들어간 이후에만 선언할 수 있습니다.

 

8. 새로운 변수를 추가로 받고 싶은 경우

*를 두개 붙인 형태인 **을 앞에 붙여서 새로운 변수이름도 받겠다는 선언도 가능합니다. 다만, **인자도 앞의 고정 argument가 모두 끝난 뒤에 선언되어야 합니다.

def func_h(**a): # 새로운 변수 이름을 마음대로 받을 수 있음
    return b + c

h = func_h(b = 2, c = 3) # 2 + 3 = 5

 

9. input 변수의 default 값을 지정하고 싶은 경우

마지막으로, 특정 input argument의 기본 값을 지정하고 싶은 경우에 대한 예시를 마지막으로 포스팅을 마치도록 하겠습니다.

def func_i(a, b = 0): # def fun_i(a = 0, b) 순서는 불가
    return a + b

i = func_i(5) # i = 5
i = func_i(5, 3) # i = 8

기본 값이 있는 인자는 기본 값을 지정하지 않은 인자의 선언이 모두 끝난 뒤에만 와야합니다. 참고로, 기본 값을 지정해준 인자는 함수를 호출할 경우 생략이 가능합니다.