파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례
파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례
람다 함수는 익명 함수라고도 불리며, 작은 일회성 루틴을 한 줄로 작성할 수 있게 해줍니다. map, filter, reduce와 함께 사용할 때 함수형 스타일 코드에서 특히 유용합니다.
람다 함수란 무엇인가?
람다는 def 대신 lambda 키워드로 정의하는 함수입니다. 0개 이상의 매개변수를 받고 단일 표현식의 값을 반환합니다. 본문이 표현식이기 때문에 문장이나 여러 줄을 포함할 수 없습니다.
모든 람다는 세 가지 필수 요소로 구성됩니다:
lambda 키워드
- 하나 이상의 매개변수(쉼표로 구분)
- 반환값을 생성하는 단일 표현식
예를 들어, lambda x, y: x + y는 두 숫자를 더합니다. 익명이지만 변수에 할당하거나 다른 함수에 전달하거나 즉시 호출할 수 있습니다.
람다 작성 방법
공식 문법:
lambda p1, p2, ... : expression
매개변수 주위에 괄호가 없다는 점에 주의하세요. 표현식에는 유효한 파이썬 연산을 모두 사용할 수 있습니다.
예제 1: 간단한 덧셈
adder = lambda x, y: x + y
print(adder(1, 2)) # → 3
예제 2: 람다 객체 검사
string = 'some kind of a useless lambda'
print(lambda string: print(string)) # → <function <lambda> at 0x...>
여기서는 람다가 호출되지 않고, print가 람다가 반환하는 함수 객체를 표시합니다.
예제 3: 즉시 호출 람다 (IIFE)
(lambda x: print(x))('IIFE in action') # → IIFE in action
정의를 괄호로 감싸고 뒤에 괄호를 추가하면 람다가 즉시 호출됩니다.
예제 4: 람다 vs 일반 함수
# 일반 함수
def printer(arg):
return print(arg)
# 람다가 함수를 호출
guru(lambda: printer('Lambda call')) # → Lambda call
두 스니펫 모두 같은 출력을 내지만, 일회성 호출만 필요할 때는 람다 버전이 더 간결합니다.
내장 함수와 람다 함께 사용하기
람다는 고차 함수의 콜백으로 전달될 때 빛을 발합니다. 일반적인 패턴들을 살펴보겠습니다.
파이썬에서 즉시 호출 함수 표현식 (IIFE)
(lambda x: x + x)(2) # → 4
filter
filter 함수는 조건을 만족하는 요소만 유지합니다.
sequences = [10, 2, 8, 7, 5, 4, 3, 11, 0, 1]
filtered = filter(lambda x: x > 4, sequences)
print(list(filtered)) # → [10, 8, 7, 5, 11]
map
map 함수는 각 요소를 변환합니다.
sequences = [10, 2, 8, 7, 5, 4, 3, 11, 0, 1]
squared = map(lambda x: x * x, sequences)
print(list(squared)) # → [100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
reduce
reduce를 사용해 시퀀스에서 단일 값을 누적합니다.
from functools import reduce
sequences = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, sequences)
print(product) # → 120
람다를 사용할 때와 피할 때
람다는 한 줄 표현식에 들어가는 간결한 일회성 연산에 이상적입니다. map, filter 같은 함수형 프로그래밍 구조에서 흔히 쓰입니다.
하지만 프로덕션 코드에서 지나치게 복잡한 람다는 피하세요. 길고 읽기 어려운 원라이너는 유지보수성을 해칩니다. 그런 경우에는 명확한 독스트링을 가진 이름이 있는 함수가 더 낫습니다.
람다 vs 일반 함수
| 특징 | 람다 | 일반 함수 |
| 문법 | lambda x: x + x | def add(x): return x + x |
| 본문 | 단일 표현식만 가능 | 여러 문장 허용 |
| 이름 | 익명 (식별자 없음) | 반드시 이름 필요 |
| 반환 | 표현식에서 암시적 | return으로 명시적 |
| 용도 | 짧은, 일회성 로직 | 재사용 가능, 복잡한 로직 |
핵심 요약
- 단일 표현식 함수에는 람다를 사용하세요.
- 로직이 복잡하거나 재사용될 때는 이름이 있는 함수를 선호하세요.
- 코드 가독성을 유지하세요. 영리함보다 단순함이 낫습니다.