함수는 입력 > 작업 > 출력의 과정으로 진행되는 명령문으로, 보통 반복되는 작업을 처리하기 위해 사용합니다. 아래는 간단한 덧셈 함수의 예시입니다.
def sum(a, b):
return a+b
sum(1, 2)
# 3
위 코드에서 def
는 함수를 선언하는 예약어이며, sum
은 함수의 이름입니다. 괄호 안의 a
와 b
는 함수에 받을 인수이며, return
이후는 함수 실행 결과값(여기서는 덧셈의 결과값)을 의미합니다.
다양한 함수의 형태
함수에는 보통 입력값과 결과값이 존재하지만, 그렇지 않은 경우도 있습니다.
입력값과 결과값이 모두 있는 함수
처음의 덧셈 함수처럼 입력값과 결과값이 존재하는 일반적인 함수입니다. 여기서 입력값은 인수 a
와 b
, 결과값은 return
이후의 a+b
를 통해 결정됩니다.
입력값은 있으나 결과값이 없는 함수
다음은 결과값이 없는 함수입니다.
def sum(a, b):
print(a + b)
sum(1, 2)
# 3
화면에 표시되는 값은 3
으로 처음과 동일해보일 수 있지만, 실제로는 결과값이 없이 값만이 출력되고 있는 것입니다. 함수에서는 return
구문이 있어야만 결과값이 출력됩니다.
입력값은 있으나 결과값이 없는 함수의 경우에는 단순히 화면에 특정 값을 출력할 때 사용하는 경우가 많습니다.
입력값이 없으나 결과값이 있는 함수
반대로 입력값이 없으나 결과값이 있는 함수도 있습니다.
def writing():
return "Hello!"
print(writing())
# 'Hello!'
입력값과 결과값이 모두 없는 함수
그렇다면 입력값과 결과값이 모두 없는 함수도 있을까요?
def greeting():
print("Welcome!")
greeting()
# 'Welcome!'
위 함수에는 어떠한 입력값이나 결과값이 존재하지 않습니다. greeting
함수를 실행하면 Welcome!
이라는 문구가 화면에 출력됩니다.
함수의 결과값과 return
함수의 결과값은 return
을 통해서만 결정된다고 정리했는데요. 다음과 같은 특징이 있습니다.
- 함수는
return
을 만나면 결과값을 출력하고 종료됩니다. - 결과값은 언제나 하나입니다.
예시를 통해 살펴보도록 하겠습니다. 다음은 커피를 판매하는 자판기 코드입니다. 사용자가 200원 미만을 넣을 경우, 돈을 더 넣어달라는 문구가 출력되고 함수가 종료됩니다. 이후, 200원 이상이 들어올 경우, 커피와 함께 잔돈을 반환합니다.
def vendingMachine (coin, coffee):
if (coin < 200):
return print("돈을 더 넣어주세요.")
else:
return print(coffee + " 나왔습니다.", "거스름 돈은 " + str((coin - 200)) +"원 입니다.")
이제 사용자가 다음과 같이 자판기를 사용합니다.
vendingMachine(100, "Latte")
# '돈을 더 넣어주세요.'
vendingMachine(300, "Latte")
# 'Latte 나왔습니다. 거스름 돈은 100원 입니다.'
첫번째의 경우에는 200원 미만의 금액이 투입되었으므로 첫 번째 return
값이 출력되고 함수를 빠져나갑니다. 두 번째의 경우에는 200원 이상의 금액이므로 주문한 커피가 나오고, 거스름돈이 반환됩니다.
이처럼 함수는 return
문이 실행되면 이후의 문을 실행하지 않고 종료되며, 언제나 하나의 결과값을 갖습니다.
다양한 입력값 받기
위의 자판기 코드를 계속 사용해보겠습니다. 만약, 사용자가 다양한 커피를 주문한다면 어떻게 할까요? 몇 가지 생각해볼 문제가 있습니다.
- 한 번에 몇 개의 커피를 주문할 지 모른다.
- 주문을 한 번에 받고 거스름 돈을 모아서 처리해야 한다.
첫 번째 문제는 *
를 활용해 해결할 수 있습니다. 입력 변수의 이름 앞에 *
를 붙일 경우, 해당 입력값이 튜플로 출력됩니다.
def vendingMachine(*coffees):
print(*coffees)
vendingMachine("Latte", "Capuccino", "Americano")
# ('Latte', 'Capuccino', 'Americano')
vendingMachine("Milk", "Cocoa", "HotChoco")
# ('Milk', 'Cocoa', 'HotChoco')
두 번째 문제는 함수의 구성을 변경하여 해결할 수 있습니다.
def vendingMachine(coin, *coffees):
order = ''
if (coin < 200 * len(coffees)):
return print("돈을 더 넣어주세요.")
else:
order =', '.join(coffees)
return print("주문하신 " + order + " 나왔습니다.\n" "잔돈은 " + str(coin - (200 * len(coffees))) + "원 입니다.")
vendingMachine(1000, "Latte", "Capuccino", "Americano")
# 주문하신 Latte, Capuccino, Americano 나왔습니다.
# 잔돈은 400원 입니다.
'개발 > Python' 카테고리의 다른 글
파이썬 함수 설명 (2) 변수와 스코프 (0) | 2021.12.09 |
---|---|
파이썬 for 구문 설명 (0) | 2021.12.07 |
파이썬 불리언 설명 (0) | 2021.12.06 |