| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 자바문법
- 정규식
- java테스트
- HashMap
- IntelliJ
- junit5
- SpringBoot
- 자바스크립트
- Eclipse
- ArrayList
- Visual Studio Code
- Array
- list
- 배열
- vscode
- 단위테스트
- 자바
- CSS
- html
- math
- junit
- js
- input
- 문자열
- 테스트자동화
- javascript
- string
- 인텔리제이
- 스프링부트
- Java
- Today
- Total
어제 오늘 내일
[Python 기초] 10. "똑같은 코드 또 쓰지 마세요!" 파이썬 함수(def)와 람다(Lambda) 본문
프로그래밍에서 함수(Function)란 자판기나 믹서기 같은 '마법의 상자'입니다.
딸기와 우유(입력값)를 넣고 버튼을 누르면, 딸기 우유(결과값)가 짠 하고 나오는 기계와 같습니다. 한 번 튼튼한 믹서기를 만들어두면, 나중에 바나나나 키위를 넣어도 알아서 주스를 만들어주니 아주 편하겠죠?
오늘은 파이썬에서 나만의 믹서기를 직접 조립하는 방법을 배워보겠습니다.
1. 나만의 마법 상자 만들기: def
파이썬에서 함수를 정의할 때는 def (define의 약자)라는 키워드를 사용합니다.
기본 공식:
def 함수이름(재료1, 재료2):
실행할 코드
return 결과물
📌 예제 코드: 커피 머신 함수 만들기
# 1. 함수 정의하기 (믹서기 만들기)
def make_coffee(bean, water_ml):
print("커피를 내리는 중입니다 삐빅...")
result = f"{bean} 원두로 내린 커피 {water_ml}ml"
return result # 완성된 결과물을 밖으로 반환(배출)합니다.
# 2. 함수 사용하기 (버튼 누르기)
# 브라질 원두와 물 250ml를 넣습니다.
my_coffee = make_coffee("브라질", 250)
print("주문하신 음료:", my_coffee)
print("-" * 20)
# 다른 재료를 넣으면 다른 결과가 나옵니다!
your_coffee = make_coffee("에티오피아", 300)
print("주문하신 음료:", your_coffee)
실행 결과:
커피를 내리는 중입니다 삐빅...
주문하신 음료: 브라질 원두로 내린 커피 250ml
--------------------
커피를 내리는 중입니다 삐빅...
주문하신 음료: 에티오피아 원두로 내린 커피 300ml
💡 코드 설명:
bean과water_ml은 함수 안으로 들어가는 매개변수(Parameter)입니다.return은 함수가 작업을 끝내고 최종적으로 뱉어내는 반환값입니다.return을 만나는 순간 함수는 즉시 종료됩니다.
2. 센스 있는 기본값 설정 (Default Parameter)
만약 매번 "물은 250ml로 해주세요"라고 말하기 귀찮다면, 함수를 만들 때 아예 기본값을 세팅해 둘 수 있습니다.
📌 예제 코드: 기본값이 있는 인사 함수
# msg 매개변수에 미리 "안녕하세요!"라는 기본값을 넣어둡니다.
def greet(name, msg="안녕하세요!"):
print(f"{name}님, {msg}")
# 1. 두 가지 재료를 다 넣었을 때
greet("김파이", "반갑습니다~") # 출력: 김파이님, 반갑습니다~
# 2. 하나의 재료만 넣었을 때 (알아서 기본값이 들어감!)
greet("박코드") # 출력: 박코드님, 안녕하세요!
3. 이름조차 필요 없는 한 줄짜리 함수: lambda (람다)
어떤 함수는 코드가 단 한 줄이면 충분할 정도로 너무 단순합니다. 게다가 딱 한 번 쓰고 버릴 거라서 굳이 def를 써서 거창하게 이름을 붙여주기도 귀찮을 때가 있죠.
이때 사용하는 것이 바로 람다(Lambda) 함수입니다.
기본 공식:lambda 입력값 : 출력할 표현식
📌 예제 코드: def와 lambda의 비교
# 일반적인 함수 (def 사용)
def add_ten(x):
return x + 10
print(add_ten(5)) # 출력: 15
# 람다 함수 (lambda 사용)
# "x가 들어오면, x + 10을 뱉어라"라는 뜻입니다.
lambda_add_ten = lambda x: x + 10
print(lambda_add_ten(5)) # 출력: 15
4. 람다의 진짜 진가: map()과 filter()
사실 람다는 단독으로 쓰일 때보다, 다른 함수의 재료(매개변수)로 쏙 들어갈 때 진짜 빛을 발합니다. 특히 리스트의 데이터를 한 방에 조작하는 map()과 filter()의 단짝 친구입니다.
① map() : 리스트의 모든 값에 함수를 똑같이 적용하기
"리스트에 있는 모든 숫자에 3을 곱해줘!"
numbers = [1, 2, 3, 4, 5]
# map(적용할 함수, 데이터 꾸러미)
# lambda x: x * 3 이라는 이름 없는 함수를 numbers 전체에 적용합니다.
result = map(lambda x: x * 3, numbers)
# map의 결과물은 눈에 보이지 않는 상태이므로, list()로 감싸서 꺼내줍니다.
print(list(result)) # 출력: [3, 6, 9, 12, 15]
② filter() : 조건에 맞는 값만 걸러내기
"리스트에 있는 숫자 중에서 짝수만 뽑아줘!"
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# filter(조건 함수, 데이터 꾸러미)
# lambda x: x % 2 == 0 (짝수인지 묻는 조건)이 True인 녀석들만 통과시킵니다.
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 출력: [2, 4, 6, 8, 10]
(💡 참고: 지난 시간에 배운 '리스트 컴프리헨션'으로도 똑같은 작업을 할 수 있습니다. 실무에서는 리스트 컴프리헨션을 더 선호하는 경향이 있지만, 이 map/filter 문법도 다른 사람의 코드를 읽기 위해 반드시 알아두어야 합니다!)
📝 마치며
오늘의 핵심 요약입니다.
def: 반복되는 코드는 묶어서 이름을 붙이고 재사용하자. 입력(매개변수)과 출력(return)이 있다.- 기본값:
변수=값형태로 함수 매개변수의 기본 옵션을 설정할 수 있다. lambda:def를 쓰기엔 너무 단순한 1회용 한 줄 함수.map/filter: 리스트의 데이터를 일괄적으로 변환하거나 필터링할 때 람다와 함께 쓰면 찰떡궁합이다.
내가 만든 함수들을 모아두면 아주 강력한 무기가 됩니다. 그런데 만약 전 세계의 천재 개발자들이 이미 만들어둔 엄청난 함수들이 있다면 어떨까요? 그걸 내 코드로 쏙 가져와서 쓸 수 있다면?
다음 포스팅에서는 "남이 만든 바퀴를 다시 발명하지 마라! 모듈(Module)과 pip 패키지 관리"에 대해 알아보겠습니다. 드디어 진짜 파이썬 생태계에 발을 들이는 순간입니다.
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍
'IT > Python' 카테고리의 다른 글
| [Python 기초] 12. "객체지향이긴 한데..." 파이썬 클래스(Class)와 self의 정체 완벽 이해 (0) | 2026.04.12 |
|---|---|
| [Python 기초] 11. "남이 만든 바퀴를 가져다 쓰자!" 파이썬 모듈(import)과 pip 패키지 가이드 (0) | 2026.04.11 |
| [Python 기초] 9. "세 줄을 한 줄로 끝낸다!" 파이썬의 꽃, 리스트 컴프리헨션 (0) | 2026.04.10 |
| [Python 기초] 8. "100번의 단순 노동을 단 세 줄로!" 파이썬의 for-in 반복문 완벽 가이드 (0) | 2026.04.10 |
| [Python 기초] 7. "괄호가 없어서 어색해요..." 파이썬의 생명, 들여쓰기(Indentation)와 if문 (0) | 2026.04.09 |
