에듀테크 프로젝트 대시보드
람다 · 고차함수
람다는 이름 없는 한 줄 함수. sorted·max·filter 등의 key 인자에 주로 씁니다.
square = lambda x: x ** 2
square(5) # => 25
add = lambda a, b: a + b
clamp = lambda x, lo, hi: max(lo, min(x, hi))
# lambda 는 단일 표현식만 — 문(statement) 불가
# 여러 줄이 필요하면 def 를 쓰라f = lambda x: ... 대신 def f(x): ... — 디버깅 시 이름이 남음words = ["banana", "kiwi", "apple"]
sorted(words, key=len) # 길이순
sorted(words, key=str.lower) # 대소문자 무시
people = [("김", 30), ("이", 25)]
sorted(people, key=lambda p: p[1]) # 나이순
max(people, key=lambda p: p[1]) # => ('김', 30)
# 다중 기준: 튜플 반환 (앞이 우선, 내림차순은 - 붙이거나 reverse)
sorted(people, key=lambda p: (-p[1], p[0]))nums = [1, 2, 3, 4]
list(map(str, nums)) # => ['1', '2', '3', '4']
list(map(lambda x: x * 2, nums)) # => [2, 4, 6, 8]
list(filter(lambda x: x % 2 == 0, nums)) # => [2, 4]
# 대개 컴프리헨션이 더 읽기 쉬움
[str(x) for x in nums]
[x for x in nums if x % 2 == 0]
# map 은 여러 iterable 도 받음
list(map(lambda a, b: a + b, [1, 2], [10, 20])) # => [11, 22]from functools import reduce
reduce(lambda acc, x: acc * x, [1, 2, 3, 4]) # => 24
reduce(lambda acc, x: acc + x, [1, 2, 3], 100) # 초기값 100 => 106
# 대부분 전용 함수가 더 명확
sum(nums) # reduce(+) 대신
max(nums)
import math; math.prod(nums) # 곱from operator import itemgetter, attrgetter
sorted(people, key=itemgetter(1)) # p[1] — lambda 보다 빠름
sorted(objs, key=attrgetter("age")) # obj.age
from functools import partial
int2 = partial(int, base=2)
int2("1010") # => 10
# 조건 만족 개수
sum(1 for x in data if x > 0)