
람다(lambda)는 파이썬을 처음 배우는 사람에게
유독 낯설고, 애매하고, 헷갈리는 개념이다.
“굳이 왜 써야 하지?”
“def로 함수 만들면 되는 거 아닌가?”
학생들을 점수 기준으로 정렬하고 싶다고 가정해보자.
students = [
{"name": "철수", "score": 85},
{"name": "영희", "score": 92},
{"name": "민수", "score": 78}
]
def get_score(student):
return student["score"]
sorted_students = sorted(students, key=get_score)
동작에는 문제가 없다.
하지만 이 함수에는 치명적인 특징이 있다.
❌ 이런 함수가 많아질수록
코드에는 “의미 없는 함수 이름”이 쌓이게 된다
sorted_students = sorted(
students,
key=lambda x: x["score"]
)
함수 이름도 없고,
def도 없고,
return도 없다.
✅ “한 번만 쓰는 간단한 함수”를 즉석에서 만든다
이것이 람다의 존재 이유다
✔ 정식 문서는 이름이 있고 오래 쓴다
✔ 포스트잇은 간단하고, 쓰고 버린다
👉 복잡하면 def
👉 짧고 즉석이면 lambda
lambda 매개변수: 표현식
람다에서 가장 중요한 규칙은 단 하나다.
람다는 반드시 “한 줄 표현식”이어야 한다
# 1. 하나의 인자
square = lambda x: x ** 2
# 2. 두 개의 인자
add = lambda x, y: x + y
# 3. 조건 표현식
is_even = lambda x: "짝수" if x % 2 == 0 else "홀수"
❌ if / for / 여러 줄 로직 불가능
❌ return 사용 불가
👉 “함수를 다른 함수에 전달할 때”
students = [
{"name": "철수", "score": 85},
{"name": "영희", "score": 92},
{"name": "민수", "score": 78}
]
sorted_by_score = sorted(
students,
key=lambda s: s["score"]
)
sorted는 내부적으로 이렇게 묻는다.
그 질문에 답하는 함수가 바로 lambda다.
top_student = max(students, key=lambda s: s["score"])
bottom_student = min(students, key=lambda s: s["score"])
✔ 최고값 / 최저값 기준 지정
✔ 실무에서 정말 자주 등장
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
even = list(filter(lambda x: x % 2 == 0, numbers))
파이썬 커뮤니티의 일반적인 합의는 다음과 같다.
👉 map / filter보다 리스트 컴프리헨션이 더 읽기 좋다
# lambda + map
[x ** 2 for x in numbers]
# lambda + filter
[x for x in numbers if x % 2 == 0]
그렇다면 람다는 쓸모없는 걸까?
❌ 아니다
✔ key 인자가 필요한 함수에서는 람다가 사실상 필수
❗ 람다는 “짧음”이 무기다
길어지는 순간 가독성은 무너진다