lambda는 작고 익명이며 단일 표현식인 함수입니다. map, filter, **reduce**는 iterable 전반에 함수를 적용하는 함수형 도구입니다. 이들이 함께 함수형 스타일을 가능하게 하지만 — Python은 동일한 작업에 종종 comprehension을 선호합니다.
lambda — 인라인 익명 함수
python
# lambda는 이름이 없는 한 줄 함수
square = lambda x: x ** 2
square(5) # 25
# 동등한 명명된 함수:
def square(x): return x ** 2
lambda는 다른 함수에 대한 인라인 인수로, 특히 정렬/필터 키로 빛을 발합니다:
people.sort(key=lambda p: p.age) # 속성으로 정렬
sorted(words, key=lambda w: len(w)) # 길이로 정렬
max(items, key=lambda x: x.score) # 기준으로 최댓값 찾기
nums = [1, 2, 3, 4]
list(map(lambda x: x ** 2, nums)) # [1, 4, 9, 16]
# 더 Pythonic한 대안 — comprehension:
[x ** 2 for x in nums] # [1, 4, 9, 16]
list(filter(lambda x: x % 2 == 0, nums)) # [2, 4]
# comprehension 등가물:
[x for x in nums if x % 2 == 0] # [2, 4]
from functools import reduce
reduce(lambda acc, x: acc + x, nums, 0) # 10 (합계)
# 하지만 내장 함수가 있으면 그것이 더 명확함:
sum(nums) # 10
map/filter의 경우, COMPREHENSION이 보통 더 읽기 쉽고 관용적임:
map(f, xs) → [f(x) for x in xs]
filter(pred, xs) → [x for x in xs if pred(x)]
lambda는 짧은 인라인 키(sort/max/filter)에 가장 적합하며, 복잡한 로직에는 아님.
Guido(Python 창시자)와 커뮤니티는 일반적으로 가독성을 위해 map/filter보다 comprehension을 선호합니다. reduce는 심지어 내장 함수에서 제외되었습니다. 하지만 key= 함수로서의 lambda는 여전히 관용적이고 흔합니다.
이 함수형 도구들은 변환과 필터를 간결하게 표현할 수 있게 합니다.
Python을 함수형으로 작성할 수 있지만, 관용적인 선택은 보통 가독성을 위해 map/filter보다 comprehension이고, reduce보다 내장 함수(sum, max, min)입니다.
lambda가 진정으로 빛나는 곳은 sort/max/min/filter에 key로 전달되는 작은 인라인 함수입니다.
둘 다 이해하고 — comprehension과 내장 함수에 대한 Pythonic한 선호를 아는 것 — 은 깔끔하고 관용적인 코드를 작성하고 실제 프로젝트에 등장하는 함수형 스타일 코드를 읽는 데 도움이 됩니다.