[python] 함수(Function)

이번 글에서는 파이썬에서 함수에 대해 알아보겠습니다.

함수는 입력을 받아 정해진 처리를 통해 출력을 하는 것을 말합니다. 
공장에서 플라스틱 가지고 일정한 공정을 통해 젓가락, 그릇, 컵 등을 만드는 것과 비슷합니다.

예시

제일 간단한 형태의 예시를 들어보겠습니다.
a와 b에 1, 2를 저장한 뒤 a, b를 더한 값을 c에 저장하고 수식을 터미널에 출력하는 과정을 짜보겠습니다.

a = 1
b = 2
c = a + b
print(a, "+", b, "=", c)

1, 2를 더할 뿐만 아니라 3+4, 등등 더하기를 여러번 하게 되면 매번 같은 코드를 짜야 합니다.

a = 1
b = 2
c = a + b
print(a, "+", b, "=", c)

a = 3
b = 4
c = a + b
print(a, "+", b, "=", c)

a = 10
b = 20
c = a + b
print(a, "+", b, "=", c)

이러한 동일한 작업을 함수로 만들어 사용하면 편하게 사용할 수 있습니다.

def Add(a, b):
    c = a + b
    print(a, "+", b, "=", c)
    return c

Add(1, 2)
Add(3, 4)
Add(10, 20)

너무 간단해서 두 방식 중에 어떤 것이 더 좋은지 알수 없지만 ,아래와 같이 수정을 해야한다면 함수로 만드는 것이 관리하기도 쉽습니다.

def Add(a, b):
    c = a + b
    print(a, "+", b, "=", c)
    print("="*7) # ======= 추가
    return c

Add(1, 2)
Add(3, 4)
Add(10, 20)

기본 구조

파이썬에서 함수 구조는 다음과 같습니다.

def 함수이름(매개변수1, 매개변수2):
    수행문장
    수행문장
    수행문장
    ...
    return 반환

위 구조에 맞춰 예시 함수를 만들어보았습니다. 매개변수를 2개 받으며, 두 개의 값을 반환하는 함수입니다.

def Add(a, b):
    return a + b

print(Add(1, 2))

입력 없는 함수

매개변수가 없는 함수도 있습니다.
괄호() 안에 아무것도 입력하지 않으면 됩니다.

def alphabet():
    return "abcdefghijklmnopqrstuvwxyz"

print(alphabet())

반환 없는 함수

반환이 없는 함수도 있습니다. return 뒤에 아무것도 입력하지 않거나 return을 입력하지 않으면 됩니다.

def print_number():
    print("0123456789")
    return

def print_alphabet():
    print("abcdefghijklmnopqrstuvwxyz")


print_number()
print_alphabet()

입력이 여러 개인 함수

입력 하는 개수가 여러개일 수도있습니다.
매개변수에 별표(*)를 입력한 뒤 매개변수명을 입력하면 됩니다.

def Add(*args):
    sum = 0
    for i in args:
        sum += i
    return sum

print(Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

위의 경우 args의 타입은 튜플입니다. 매개변수가 여러개일 경우도 가능합니다.

def Add(init, *args):
    sum = init
    for i in args:
        sum += i
    return sum

print(Add(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(Add(-10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

키워드 파라미터

매개변수에 별표를 두개 붙이면 키워드 파라미터입니다. 키워드 파라미터는 매개변수가 딕셔너리로 만들어집니다.
키워드 파라미터에 입력할 땐 딕셔너리처럼 key=value로 입력해야합니다.

def keyword_param(**kargs):
    print(kargs)

keyword_param(apple="사과", banana="바나나")
keyword_param(d=4)

반환이 여러 개인 함수

값을 여러 개 반환할 수도 있습니다.
return에 반환할 값들을 쉼표(,)로 구별지으면 됩니다.

def calc(a, b):
    return a + b, a - b, a * b

sum, sub, mul = calc(1, 2)
print("sum:", sum)
print("sub:", sub)
print("mul:", mul)

위 예시 함수에서 반환값 중에 더하기와 곱하기만 반환하려면 언더바(_)를 사용하면 됩니다.
언더바(_)는 반환값을 받지 않겠다는 의미입니다.

def calc(a, b):
    return a + b, a - b, a * b

sum, _, mul = calc(1, 2)
print("sum:", sum)
print("mul:", mul)

하지만 반환값은 1개

위에서는 반환값이 여러 개라고 했지만 결국 1개입니다.
아래 예시에서 보듯이 하나의 변수에 받을 수 있고, 그 변수 타입은 튜플입니다.

def calc(a, b):
    return a + b, a - b, a * b

sum_sub_mul = calc(1, 2)
print(sum_sub_mul)

이상으로 파이썬에서 함수에 대해 알아보았습니다.