
17. 함수 (1) - 코드를 재사용하는 방법
같은 코드를 세 번 이상 반복하고 있다면, 그건 함수로 만들어야 한다는 신호다. 한 번 만들어두면 이름만 불러서 재사용할 수 있는 함수의 세계로 들어가보자.
함수가 필요한 이유
# 같은 인사를 여러 번...
print("=" * 20)
print("안녕하세요!")
print("=" * 20)
# 또...
print("=" * 20)
print("안녕하세요!")
print("=" * 20)
이걸 함수로 만들면:
def greet():
print("=" * 20)
print("안녕하세요!")
print("=" * 20)
greet() # 한 줄로 끝!
greet() # 또 호출!

함수 정의와 호출
def 함수이름():
실행할 코드
def키워드로 정의한다- 함수 이름 뒤에 괄호()와 콜론(:)을 쓴다
- 실행할 코드는 들여쓰기한다
- 정의만으로는 실행되지 않는다. 호출해야 실행된다
# 정의
def say_hello():
print("Hello, Python!")
# 호출
say_hello() # Hello, Python!
say_hello() # Hello, Python!
매개변수와 인자
매개변수 (parameter)
함수에 입력값을 전달할 수 있다.
def greet(name): # name이 매개변수
print(f"안녕하세요, {name}님!")
greet("김철수") # "김철수"가 인자 → 안녕하세요, 김철수님!
greet("이영희") # 안녕하세요, 이영희님!
여러 개의 매개변수
def add(a, b):
print(f"{a} + {b} = {a + b}")
add(3, 5) # 3 + 5 = 8
add(10, 20) # 10 + 20 = 30
def introduce(name, age, city):
print(f"이름: {name}, 나이: {age}세, 도시: {city}")
introduce("김철수", 25, "서울")
기본값 매개변수
매개변수에 기본값을 설정할 수 있다. 인자를 전달하지 않으면 기본값이 사용된다.
def greet(name, greeting="안녕하세요"):
print(f"{greeting}, {name}님!")
greet("김철수") # 안녕하세요, 김철수님!
greet("이영희", "반갑습니다") # 반갑습니다, 이영희님!
⚠️ 주의: 기본값이 있는 매개변수는 뒤쪽에 와야 한다.
def f(a="x", b):는 에러!
키워드 인자
인자를 이름으로 지정해서 전달할 수 있다. 순서를 바꿔도 된다.
def create_profile(name, age, city):
print(f"{name} ({age}세, {city})")
# 위치 인자
create_profile("김철수", 25, "서울")
# 키워드 인자 - 순서 상관없음
create_profile(city="부산", name="이영희", age=30)
반환값 (return)
함수는 결과를 돌려줄 수 있다.
def add(a, b):
return a + b # 결과를 반환
result = add(3, 5) # 반환값을 변수에 저장
print(result) # 8
# 바로 사용도 가능
print(add(10, 20)) # 30
return의 역할
- 값을 돌려준다
- 함수를 즉시 종료한다 (return 이후의 코드는 실행 안 됨)
def check_age(age):
if age >= 19:
return "성인"
return "미성년자" # elif 없이도 깔끔
status = check_age(25)
print(status) # 성인
여러 값 반환
def get_stats(numbers):
return min(numbers), max(numbers), sum(numbers) / len(numbers)
low, high, avg = get_stats([85, 92, 78, 95, 88])
print(f"최소: {low}, 최대: {high}, 평균: {avg:.1f}")
# 최소: 78, 최대: 95, 평균: 87.6
💡 여러 값을 return하면 튜플로 반환된다. 14편에서 배운 튜플 언패킹으로 받으면 된다.
return이 없는 함수
return이 없으면 None을 반환한다.
def say_hello():
print("Hello!")
result = say_hello() # Hello! 출력
print(result) # None
함수 설계 원칙
하나의 함수, 하나의 역할
# 나쁜 예: 너무 많은 일을 한다
def do_everything(data):
# 데이터 정제 + 계산 + 출력 + 저장...
pass
# 좋은 예: 역할을 나눈다
def clean_data(data):
...
def calculate(data):
...
def display(result):
...
이름은 동사로
# 좋은 함수 이름
def get_average(scores): ...
def is_valid(email): ...
def calculate_tax(income): ...
def print_report(data): ...
# 나쁜 함수 이름
def data(scores): ... # 뭘 하는지 모름
def process(x): ... # 너무 모호
실전 예시: 성적 관리 함수
def calculate_grade(score):
"""점수를 학점으로 변환"""
if score >= 90: return "A"
elif score >= 80: return "B"
elif score >= 70: return "C"
elif score >= 60: return "D"
else: return "F"
def print_report(students):
"""성적표 출력"""
print("=" * 35)
print(" 성적표")
print("=" * 35)
total = 0
for name, score in students.items():
grade = calculate_grade(score)
print(f" {name}: {score}점 ({grade})")
total += score
avg = total / len(students)
print("-" * 35)
print(f" 평균: {avg:.1f}점")
# 사용
scores = {"김철수": 85, "이영희": 92, "박민수": 78, "최지원": 95}
print_report(scores)
직접 해보기
문제 1. 두 수 중 큰 수를 반환하는 get_max(a, b) 함수를 만들어보자.
문제 2. 섭씨를 화씨로 변환하는 to_fahrenheit(celsius) 함수를 만들어보자. (공식: F = C × 9/5 + 32)
문제 3. 리스트의 평균을 구하는 get_average(numbers) 함수를 만들어보자. 빈 리스트면 0을 반환.
문제 4. BMI를 계산하고 판정을 반환하는 check_bmi(height_cm, weight) 함수를 만들어보자.
정답 보기
# 문제 1
def get_max(a, b):
if a >= b:
return a
return b
print(get_max(10, 20)) # 20
# 문제 2
def to_fahrenheit(celsius):
return celsius * 9 / 5 + 32
print(f"100°C = {to_fahrenheit(100)}°F") # 212.0
# 문제 3
def get_average(numbers):
if not numbers:
return 0
return sum(numbers) / len(numbers)
print(get_average([85, 90, 78])) # 84.33...
print(get_average([])) # 0
# 문제 4
def check_bmi(height_cm, weight):
height_m = height_cm / 100
bmi = weight / (height_m ** 2)
if bmi < 18.5:
category = "저체중"
elif bmi < 23:
category = "정상"
elif bmi < 25:
category = "과체중"
else:
category = "비만"
return bmi, category
bmi, cat = check_bmi(175, 70)
print(f"BMI: {bmi:.1f}, 판정: {cat}")
오늘의 정리
| 항목 | 내용 |
|---|---|
| 함수 정의 | def 이름(매개변수): |
| 매개변수 | 함수에 전달하는 입력값. 기본값 설정 가능 |
| return | 값 반환 + 함수 종료. 여러 값 반환 가능 (튜플) |
| 키워드 인자 | 함수(name="값") — 이름으로 인자 전달 |
| 설계 원칙 | 하나의 함수 = 하나의 역할. 이름은 동사로 |
다음 편 예고: 함수 (2) - 스코프와 고급 기능
함수 안에서 만든 변수는 밖에서 쓸 수 있을까? *args와 **kwargs는 뭘까? 람다 함수는? 함수의 심화 기능들을 알아보자.
태그: 파이썬 Python 파이썬독학 함수 def 매개변수 반환값 return 파이썬함수 파이썬기초 IT교육
'Python' 카테고리의 다른 글
| 19. 재귀 함수 - 자기 자신을 호출하는 함수 (0) | 2026.02.22 |
|---|---|
| 18. 함수 (2) - 스코프와 고급 기능 (0) | 2026.02.22 |
| 16. 자료구조 비교 총정리 - 상황별 선택 가이드 (0) | 2026.02.22 |
| 15. 컴프리헨션 - 파이썬다운 코드 작성법 (0) | 2026.02.22 |
| 14. 튜플과 세트 - 용도에 맞는 그릇 선택 (0) | 2026.02.22 |
댓글