파이썬에서 람다 표현식(Lambda Expressions)은 간단한 익명 함수(Anonymous Function)를 생성하는 방법이다. 람다 함수는 일반적으로 한 줄로 작성되며, 보통 한 번만 사용되는 간단한 함수에 유용하다.
1. 람다 표현식의 기본 구조
람다 함수는 lambda 키워드를 사용하여 정의하며, 매개변수 목록과 식으로 구성된다. 람다 함수는 이름이 없는 함수이므로 익명 함수라고도 한다.
lambda 매개변수1, 매개변수2, ... : 식
람다 함수는 식의 결과를 반환한다. 일반 함수와 달리 여러 줄의 문장을 포함할 수 없으며, 하나의 식만 포함할 수 있다.
add = lambda x, y: x + y
print(add(2, 3)) # 출력: 5
이 예제에서 lambda x, y: x + y는 두 숫자를 더하는 익명 함수를 정의하며, add 변수에 할당된다. add(2, 3)는 람다 함수를 호출하여 두 숫자의 합을 반환한다.
2. 람다 표현식과 일반 함수 비교
람다 함수는 익명 함수로 사용되며, 일반 함수와는 다음과 같은 차이점이 있다:
익명 함수: 람다 함수는 이름이 없으며, 일시적으로 사용된다.
한 줄 표현식: 람다 함수는 한 줄로 작성되며, 하나의 식만 포함할 수 있다.
간단한 작업: 주로 간단한 연산이나 표현식을 수행할 때 사용된다.
# 일반 함수
def add(x, y):
return x + y
print(add(2, 3)) # 출력: 5
# 람다 함수
add_lambda = lambda x, y: x + y
print(add_lambda(2, 3)) # 출력: 5
이 예제에서 add 함수는 일반 함수로 정의되며, add_lambda는 동일한 기능을 하는 람다 함수로 정의된다.
3. 람다 표현식의 사용 예제
람다 함수는 다양한 상황에서 사용될 수 있으며, 특히 함수형 프로그래밍 스타일에서 자주 사용된다.
예제 1: 리스트의 정렬
람다 함수는 리스트의 정렬 기준으로 자주 사용된다.
points = [(1, 2), (4, 1), (5, -2), (3, 3)]
sorted_points = sorted(points, key=lambda point: point[1])
print(sorted_points) # 출력: [(5, -2), (4, 1), (1, 2), (3, 3)]
예제 2: map 함수와 함께 사용
map 함수는 주어진 함수를 시퀀스의 각 요소에 적용한 결과를 반환한다
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers) # 출력: [1, 4, 9, 16, 25]
예제 3: filter 함수와 함께 사용
filter 함수는 주어진 함수의 조건을 만족하는 시퀀스의 요소들만 반환한다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8, 10]
이 예제에서 filter(lambda x: x % 2 == 0, numbers)는 리스트의 짝수 요소만 반환한다.
예제 4: reduce 함수와 함께 사용
reduce 함수는 시퀀스의 모든 요소를 누적하여 하나의 값으로 반환한다. functools 모듈에서 reduce 함수를 가져와야 한다.
from functools import reduce
numbers = [1, 2, 3, 4, 5]
sum_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_numbers) # 출력: 15
이 예제에서 reduce(lambda x, y: x + y, numbers)는 리스트의 모든 요소를 합산하여 하나의 값을 반환한다.
4. 람다 함수의 제한 사항
람다 함수는 간결하고 유용하지만, 몇 가지 제한 사항이 있다:
여러 줄 표현 불가: 람다 함수는 단일 표현식만 포함할 수 있으며, 여러 줄의 코드를 포함할 수 없다.
복잡한 로직 부적합: 복잡한 로직을 처리하기에는 적합하지 않으며, 주로 간단한 작업에 사용된다.
디버깅 어려움: 람다 함수는 이름이 없기 때문에 디버깅이 어려울 수 있다.