5회차: 함수(Function)
코드 블록의 Try it Yourself 버튼으로 직접 실행할 수 있다.
구문
5회차: 함수(Function)
선수 학습: 4회차 (반복문)
학습 목표
- 함수(Function)의 개념과 필요성을 이해한다.
def(데프)로 함수를 정의하고 호출할 수 있다.- 매개변수(Parameter)와 반환값(Return Value)을 활용할 수 있다.
- 지역변수(Local Variable)와 전역변수(Global Variable)를 이해한다.
5.1. 함수란?
5.1.1. 함수의 개념
함수(Function)는 특정 작업을 수행하는 코드 묶음이다. 한 번 정의해두면 필요할 때마다 이름만 불러서 실행할 수 있다.
일상의 예를 들면, 세탁기를 생각할 수 있다. 세탁기의 "표준 세탁" 버튼을 누르면 물 넣기 → 세제 투입 → 세탁 → 헹굼 → 탈수까지 모든 과정이 자동으로 실행된다. 매번 모든 단계를 수동으로 할 필요가 없다. 파이썬의 함수도 마찬가지이다.
5.1.2. 함수가 없을 때의 문제점
친구 3명의 점수를 평균 계산하는 코드를 함수 없이 작성한다고 가정한다.
# 홍길동 성적
s1 = 80
s2 = 90
s3 = 70
avg = (s1 + s2 + s3) / 3
print(f"홍길동 평균: {avg:.1f}")
# 김영희 성적
s1 = 95
s2 = 85
s3 = 75
avg = (s1 + s2 + s3) / 3
print(f"김영희 평균: {avg:.1f}")
# 이철수 성적
s1 = 60
s2 = 70
s3 = 65
avg = (s1 + s2 + s3) / 3
print(f"이철수 평균: {avg:.1f}")
위 코드는 같은 계산 구조가 3번 반복된다. 만약 평균 계산 방식을 바꾸고 싶다면 3곳을 모두 수정해야 한다. 함수를 사용하면 이 문제를 해결할 수 있다.
5.2. 함수 정의와 호출
5.2.1. 함수 만들기 — def(데프)
def 키워드로 함수를 정의한다.
def 함수이름():
실행할 코드
5.2.2. 함수 정의와 호출 예시
def greet():
print("안녕하세요!")
print("파이썬 수업에 오신 것을 환영합니다.")
greet()
greet()
greet()
| 줄 | 설명 |
|---|---|
| 1 | def 키워드 뒤에 함수 이름 greet 를 쓰고 괄호 () 와 콜론 : 으로 마친다. |
| 2~3 | 함수가 호출될 때 실행될 코드를 들여쓰기하여 작성한다. 이 부분을 함수 본문(Body) 이라 한다. |
| 5~7 | greet() 처럼 함수 이름 뒤에 () 를 붙이면 함수를 호출(Call) 한다. 3번 호출했으므로 함수 본문이 3번 실행된다. |
실행 결과
안녕하세요!
파이썬 수업에 오신 것을 환영합니다.
안녕하세요!
파이썬 수업에 오신 것을 환영합니다.
안녕하세요!
파이썬 수업에 오신 것을 환영합니다.
함수는 정의만 해도 실행되지 않는다. 반드시 호출해야 실행된다. 함수를 정의하는 것은 레시피를 작성하는 것이고, 호출하는 것은 그 레시피대로 실제로 요리하는 것이다.
5.3. 매개변수(Parameter)와 인수(Argument)
5.3.1. 매개변수란?
함수를 호출할 때 외부에서 값을 전달받을 수 있다. 이 값을 받기 위해 함수 괄호 안에 선언하는 변수를 매개변수(Parameter) 라 한다.
def greet(name):
print(f"안녕하세요, {name}님!")
greet("홍길동")
greet("김영희")
greet("이철수")
| 줄 | 설명 |
|---|---|
| 1 | 함수 괄호 안의 name 이 매개변수이다. 함수 안에서만 사용할 수 있는 변수이다. |
| 2 | 매개변수 name 을 f-string 안에서 사용한다. |
| 4 | "홍길동" 을 전달하여 호출한다. 함수 안에서 name = "홍길동" 이 된다. |
| 5 | "김영희" 를 전달하여 호출한다. name = "김영희" 가 된다. |
| 6 | "이철수" 를 전달하여 호출한다. name = "이철수" 가 된다. |
실행 결과
안녕하세요, 홍길동님!
안녕하세요, 김영희님!
안녕하세요, 이철수님!
호출할 때 전달하는 값 "홍길동", "김영희", "이철수" 를 인수(Argument) 라 한다.
5.3.2. 여러 개의 매개변수
매개변수는 쉼표(,)로 구분하여 여러 개를 사용할 수 있다.
def intro(name, job, lv):
print(f"이름: {name} | 직업: {job} | 레벨: {lv}")
intro("홍길동", "전사", 30)
intro("김영희", "마법사", 25)
| 줄 | 설명 |
|---|---|
| 1 | 세 개의 매개변수를 쉼표로 구분하여 선언한다. |
| 4 | 세 인수를 순서대로 전달한다. name="홍길동", job="전사", lv=30 이 된다. |
실행 결과
이름: 홍길동 | 직업: 전사 | 레벨: 30
이름: 김영희 | 직업: 마법사 | 레벨: 25
5.4. 반환값(Return Value)
5.4.1. return이란?
return 키워드는 함수 실행 결과를 호출한 곳으로 돌려보낸다.
지금까지 함수 안에서 print() 로 출력만 했다. 하지만 계산 결과를 다른 변수에 저장하거나 다른 계산에 사용하려면 return 으로 값을 반환해야 한다.
5.4.2. return 기본 사용법
def add(a, b):
result = a + b
return result
x = add(10, 20)
print(x)
print(add(5, 7))
print(add(3, 4) + add(1, 2))
| 줄 | 설명 |
|---|---|
| 1 | 두 개의 매개변수 a, b 를 받는 함수를 정의한다. |
| 2 | a + b 의 결과를 result 에 저장한다. |
| 3 | return result 로 result 값을 호출한 곳으로 돌려보낸다. |
| 5 | add(10, 20) 은 30 을 반환한다. 이 값이 x 에 저장된다. |
| 6 | x 의 값 30 을 출력한다. |
| 7 | add(5, 7) 은 12 를 반환한다. 이 반환값이 바로 print() 에 전달된다. |
| 8 | add(3, 4) 는 7, add(1, 2) 는 3 을 반환한다. 7 + 3 = 10 을 출력한다. |
실행 결과
30
12
10
5.4.3. print 와 return 의 차이
def calc_print(a, b):
print(a + b) # 화면에 출력만 한다. 값을 돌려주지 않는다.
def calc_return(a, b):
return a + b # 계산 결과를 돌려준다.
result1 = calc_print(3, 4)
result2 = calc_return(3, 4)
print("calc_print 반환값:", result1)
print("calc_return 반환값:", result2)
| 줄 | 설명 |
|---|---|
| 7 | calc_print(3, 4) 는 7 을 화면에 출력하지만, 아무것도 돌려주지 않는다. result1 에는 None 이 저장된다. |
| 8 | calc_return(3, 4) 는 7 을 result2 에 저장한다. |
실행 결과
7
calc_print 반환값: None
calc_return 반환값: 7
계산 결과를 나중에 사용해야 한다면 return 을 사용한다. 단순히 출력만 하고 끝내려면 print 를 사용한다. 실무에서는 대부분 return 을 사용한다.
5.4.4. 여러 값 반환하기
return 뒤에 쉼표로 구분하면 여러 값을 한 번에 반환할 수 있다.
def min_max(nums):
return min(nums), max(nums)
scores = [85, 92, 78, 95, 60]
low, high = min_max(scores)
print(f"최저: {low}점, 최고: {high}점")
| 줄 | 설명 |
|---|---|
| 2 | min(nums) 는 리스트에서 최솟값, max(nums) 는 최댓값을 반환하는 내장 함수이다. 두 값을 묶어서 반환한다. |
| 5 | 반환된 두 값을 low, high 두 변수에 나누어 저장한다. |
실행 결과
최저: 60점, 최고: 95점
5.5. 기본값(Default) 매개변수
5.5.1. 기본값이란?
매개변수에 기본값을 미리 지정할 수 있다. 함수를 호출할 때 해당 인수를 전달하지 않으면 기본값이 사용된다.
def intro(name, job="모험가", lv=1):
print(f"이름: {name} | 직업: {job} | 레벨: {lv}")
intro("홍길동")
intro("김영희", "마법사")
intro("이철수", "전사", 50)
| 줄 | 설명 |
|---|---|
| 1 | job 의 기본값은 "모험가", lv 의 기본값은 1 이다. |
| 4 | name 만 전달했으므로 job="모험가", lv=1 이 사용된다. |
| 5 | name 과 job 을 전달했으므로 lv=1 기본값이 사용된다. |
| 6 | 세 값 모두 전달했으므로 기본값이 사용되지 않는다. |
실행 결과
이름: 홍길동 | 직업: 모험가 | 레벨: 1
이름: 김영희 | 직업: 마법사 | 레벨: 1
이름: 이철수 | 직업: 전사 | 레벨: 50
기본값이 있는 매개변수는 반드시 기본값이 없는 매개변수보다 뒤에 위치해야 한다. def f(job="모험가", name): 처럼 쓰면 오류가 발생한다.
5.6. 지역변수(Local Variable)와 전역변수(Global Variable)
5.6.1. 지역변수
함수 안에서 만든 변수는 지역변수(Local Variable) 이다. 함수 안에서만 사용할 수 있으며 함수가 종료되면 사라진다.
def calc():
x = 100 # 지역변수
print("함수 안:", x)
calc()
# print(x) # ← 오류! 함수 밖에서는 x를 사용할 수 없다.
| 줄 | 설명 |
|---|---|
| 2 | x = 100 은 calc 함수 안에서 만들어진 지역변수이다. |
| 3 | 함수 안에서는 x 를 사용할 수 있다. |
| 6 | 주석 처리된 줄처럼 함수 밖에서 x 를 사용하면 NameError 오류가 발생한다. |
5.6.2. 전역변수
함수 밖에서 만든 변수는 전역변수(Global Variable) 이다. 코드 어디서든 사용할 수 있다.
title = "파이썬 게임" # 전역변수
def show_title():
print(title) # 함수 안에서 전역변수 사용 가능
show_title()
print(title) # 함수 밖에서도 사용 가능
5.7. 종합 예제: 계산기 프로그램
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
if b == 0:
return "0으로 나눌 수 없습니다."
return a / b
def calc(a, b, op):
if op == "+":
return add(a, b)
elif op == "-":
return sub(a, b)
elif op == "*":
return mul(a, b)
elif op == "/":
return div(a, b)
else:
return "알 수 없는 연산자입니다."
a = float(input("첫 번째 숫자: "))
b = float(input("두 번째 숫자: "))
op = input("연산자 (+, -, *, /): ")
result = calc(a, b, op)
print(f"결과: {result}")
| 줄 | 설명 |
|---|---|
| 1~2 | 더하기 함수. 두 수를 더한 결과를 반환한다. |
| 4~5 | 빼기 함수. 두 수를 뺀 결과를 반환한다. |
| 7~8 | 곱하기 함수. 두 수를 곱한 결과를 반환한다. |
| 10~12 | 나누기 함수. b 가 0이면 오류 문자열을 반환하고, 아니면 나눗셈 결과를 반환한다. |
| 14~23 | 연산자에 따라 알맞은 함수를 호출하여 결과를 반환하는 통합 계산 함수이다. |
| 25~27 | 사용자에게 두 숫자와 연산자를 입력받는다. |
| 29~30 | calc() 함수를 호출하여 결과를 출력한다. |
5.8. 실습 과제
과제 1. 섭씨-화씨 변환기
섭씨(℃)를 화씨(℉)로, 화씨를 섭씨로 변환하는 함수를 각각 만들고, 사용자에게 값을 입력받아 두 결과를 모두 출력한다.
- 섭씨 → 화씨 공식:
화씨 = 섭씨 × 9 / 5 + 32 - 화씨 → 섭씨 공식:
섭씨 = (화씨 - 32) × 5 / 9
과제 2. 평균 계산기 함수 개선
3개의 점수를 매개변수로 받아 평균을 반환하는 함수를 만들고, 함수를 3회 호출하여 각 학생의 평균을 출력한다.