어제 오늘 내일

[Python 기초] 10. "똑같은 코드 또 쓰지 마세요!" 파이썬 함수(def)와 람다(Lambda) 본문

IT/Python

[Python 기초] 10. "똑같은 코드 또 쓰지 마세요!" 파이썬 함수(def)와 람다(Lambda)

hi.anna 2026. 4. 11. 01:00

프로그래밍에서 함수(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

💡 코드 설명:

  • beanwater_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 문법도 다른 사람의 코드를 읽기 위해 반드시 알아두어야 합니다!)


📝 마치며

오늘의 핵심 요약입니다.

  1. def: 반복되는 코드는 묶어서 이름을 붙이고 재사용하자. 입력(매개변수)과 출력(return)이 있다.
  2. 기본값: 변수=값 형태로 함수 매개변수의 기본 옵션을 설정할 수 있다.
  3. lambda: def를 쓰기엔 너무 단순한 1회용 한 줄 함수.
  4. map/filter: 리스트의 데이터를 일괄적으로 변환하거나 필터링할 때 람다와 함께 쓰면 찰떡궁합이다.

내가 만든 함수들을 모아두면 아주 강력한 무기가 됩니다. 그런데 만약 전 세계의 천재 개발자들이 이미 만들어둔 엄청난 함수들이 있다면 어떨까요? 그걸 내 코드로 쏙 가져와서 쓸 수 있다면?

다음 포스팅에서는 "남이 만든 바퀴를 다시 발명하지 마라! 모듈(Module)과 pip 패키지 관리"에 대해 알아보겠습니다. 드디어 진짜 파이썬 생태계에 발을 들이는 순간입니다.

도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍

반응형
Comments