C
Python/중급/Lesson 10

람다 함수 (Lambda)

30분·theory
이 챕터
2/8
Python

람다 함수 (Lambda)

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ lambda + map / filter / sorted key 인자
  • ✅ lambda 가 복잡해지면 명명 함수로 추출
  • ✅ functools.partial 로 인자 고정

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

lambda 5가지 패턴 — 코드 + 실행 결과

lambda = 이름 없는 한 줄 함수. 짧은 함수를 그 자리에서 만들 때.


1. def vs lambda — 같은 함수

python
# 일반 함수
def 더하기(a, b):
    return a + b

# 같은 일을 lambda 로
더하기 = lambda a, b: a + b

print(더하기(3, 5))      # 8

lambda 매개변수: 표현식return 자동.


2. 진짜 쓸모 — sorted() 의 key

python
학생들 = [
    ("홍길동", 28, 85),
    ("이몽룡", 30, 92),
    ("성춘향", 25, 78),
]

# 점수 (3번째 = index 2) 순으로 정렬
점수순 = sorted(학생들, key=lambda x: x[2])
print(점수순)
# [('성춘향', 25, 78), ('홍길동', 28, 85), ('이몽룡', 30, 92)]

# 점수 내림차순
점수내림 = sorted(학생들, key=lambda x: -x[2])

key=lambda x: ... 가 lambda 최대 사용처. 한 번 쓰고 버리는 함수.


3. map · filter 와 결합

python
숫자들 = [1, 2, 3, 4, 5]

# map — 변환
제곱 = list(map(lambda x: x * x, 숫자들))
print(제곱)              # [1, 4, 9, 16, 25]

# filter — 거르기
짝수 = list(filter(lambda x: x % 2 == 0, 숫자들))
print(짝수)              # [2, 4]

⚠️ 그러나 list comprehension 이 더 Pythonic — [x*x for x in 숫자들].


4. dict 정렬 — value 기준

python
점수 = {"홍길동": 85, "이몽룡": 92, "성춘향": 78}

# value 기준 정렬
정렬 = sorted(점수.items(), key=lambda kv: kv[1], reverse=True)
print(정렬)
# [('이몽룡', 92), ('홍길동', 85), ('성춘향', 78)]

5. 안 좋은 예 — lambda 남용

python
# ❌ 이렇게 쓰지 마세요 — 이름 있는 함수가 더 명확
값_검증 = lambda x: isinstance(x, int) and x > 0 and x < 100

# ✅ def 로 명확하게
def 값_검증(x):
    """1~99 사이의 양의 정수인지 확인"""
    return isinstance(x, int) and 0 < x < 100

규칙: lambda 는 그 자리에서 한 번 쓸 때만. 이름 붙일 거면 def.


한 줄 요약

사용처예시
sorted keysorted(xs, key=lambda x: x[1])
mapmap(lambda x: x*2, xs)
filterfilter(lambda x: x>0, xs)
dict 정렬sorted(d.items(), key=lambda kv: kv[1])

핵심: 이름 안 붙는 짧은 1회용 함수. 길어지면 def.

💻 람다 함수 예제
# 기본 람다
add = lambda x, y: x + y
print(add(3, 5))  # 8

# 일반 함수와 비교
def add_func(x, y):
    return x + y

# 정렬 key로 활용
students = [
    {'name': '철수', 'score': 85},
    {'name': '영희', 'score': 92},
    {'name': '민수', 'score': 78}
]

# 점수 기준 정렬
sorted_students = sorted(students, key=lambda x: x['score'])
print([s['name'] for s in sorted_students])  # ['민수', '철수', '영희']

# 역순 정렬
sorted_desc = sorted(students, key=lambda x: x['score'], reverse=True)

# 튜플 리스트 정렬
pairs = [(1, 'b'), (2, 'a'), (3, 'c')]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs)  # [(2, 'a'), (1, 'b'), (3, 'c')]

# 조건 표현식과 함께
check = lambda x: "양수" if x > 0 else "음수" if x < 0 else "영"
print(check(5))  # 양수

💡 핵심 포인트

1. 람다는 단일 표현식만 가능 (문장 불가)
2. 복잡한 로직은 일반 함수 권장
3. sorted(), max(), min()의 key 인자에 활용

Python은 간결하고 읽기 쉬운 문법으로 다양한 분야에 활용됩니다. 인터프리터 언어로 REPL 환경에서 즉시 실행 가능합니다. PEP 8 코딩 스타일 가이드를 따르고, Black/autopep8으로 자동 포맷팅합니다. 타입 힌트(type hints)로 코드 가독성과 IDE 지원을 향상시킵니다. pip로 패키지 관리, venv/conda로 가상환경을 구성합니다.

🐍 실행해보기 — 람다 함수 (Lambda)

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 함수에 타입 힌트 + docstring 추가해줘"
  • "이 함수의 부수효과 (전역 변수 변경) 제거해서 순수 함수로 바꿔줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

먼저 읽으면 좋은 개념: 리스트 컴프리헨션
다음 추천: 제너레이터
람다 함수 - Python