Python lambda 완벽 가이드: 익명 함수로 코드 간결하게 만들기

Python에서 lambda익명 함수를 생성하기 위한 키워드로, 이름 없는 간단한 함수를 한 줄로 작성할 수 있게 도와줍니다. 복잡한 함수 선언 없이 간단한 작업을 처리할 때 매우 유용하지만, lambda를 처음 접하면 그 문법과 용도가 낯설 수 있습니다.

이번 글에서는 lambda 함수의 개념과 작성법, 그리고 실제 코드에서 어떻게 활용할 수 있는지 다양한 예제를 통해 알아보겠습니다.


lambda 함수란?

lambda한 줄로 간단히 정의할 수 있는 익명 함수를 생성하는 Python 키워드입니다. 일반 함수와는 달리 def 키워드로 이름을 정의하지 않고도 간단한 작업을 처리할 수 있습니다.

기본 문법

lambda arguments: expression
  • arguments: 함수의 인자
  • expression: 반환할 값이나 계산식 (한 줄로 작성)

1. lambda로 간단한 함수 생성하기

lambda를 사용하면 간단한 함수를 한 줄로 정의할 수 있습니다. 아래는 두 숫자의 합을 구하는 함수를 일반 함수와 lambda로 각각 작성한 예제입니다.

# 일반 함수
def add(a, b):
    return a + b

# lambda 함수
add_lambda = lambda a, b: a + b

# 실행 예시
print(add(5, 3))          # 8
print(add_lambda(5, 3))   # 8

결과

8
8

설명

  • add 함수는 일반적으로 정의된 함수입니다.
  • add_lambda는 동일한 작업을 수행하지만, lambda를 사용해 한 줄로 작성되었습니다.
  • 간단한 작업의 경우 lambda를 사용하면 코드를 더 간결하게 작성할 수 있습니다.

2. lambdamap을 활용한 리스트 처리

리스트의 각 요소에 함수를 적용하려면 lambdamap을 함께 사용할 수 있습니다. 아래는 리스트의 각 요소를 제곱하는 예제입니다.

numbers = [1, 2, 3, 4, 5]

# lambda와 map 사용
squared = map(lambda x: x ** 2, numbers)

# 결과 출력
print(list(squared))

결과

[1, 4, 9, 16, 25]

설명

  • map 함수는 첫 번째 인자로 전달된 함수를 리스트의 각 요소에 적용합니다.
  • lambda x: x ** 2는 각 요소를 제곱하는 익명 함수입니다.
  • 이를 통해 복잡한 코드 없이 간단히 리스트의 요소를 변환할 수 있습니다.

3. lambdafilter로 조건부 리스트 생성

리스트에서 특정 조건에 맞는 요소만 추출하려면 lambdafilter를 사용할 수 있습니다. 아래는 짝수만 추출하는 예제입니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8]

# lambda와 filter 사용
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# 결과 출력
print(list(even_numbers))

결과

[2, 4, 6, 8]

설명

  • filter 함수는 조건을 만족하는 요소만 반환합니다.
  • lambda x: x % 2 == 0은 요소가 짝수인지 확인하는 익명 함수입니다.
  • 이를 통해 리스트에서 필요한 데이터만 간단히 추출할 수 있습니다.

4. lambdasorted로 정렬 기준 지정하기

리스트나 딕셔너리를 정렬할 때, lambda를 사용해 정렬 기준을 간단히 지정할 수 있습니다. 아래는 이름과 나이가 포함된 튜플 리스트를 나이에 따라 정렬하는 예제입니다.

people = [("Alice", 30), ("Bob", 25), ("Charlie", 35)]

# lambda를 사용해 나이에 따라 정렬
sorted_people = sorted(people, key=lambda person: person[1])

# 결과 출력
print(sorted_people)

결과

[('Bob', 25), ('Alice', 30), ('Charlie', 35)]

설명

  • sorted 함수는 key 매개변수를 통해 정렬 기준을 지정합니다.
  • lambda person: person[1]은 각 튜플의 두 번째 값(나이)을 기준으로 정렬합니다.
  • 이를 통해 복잡한 기준이 필요하지 않은 경우 간단히 정렬 기준을 정의할 수 있습니다.

5. lambdareduce로 값 누적 계산하기

functools.reducelambda를 함께 사용하면 리스트의 값을 누적 계산할 수 있습니다. 아래는 리스트의 요소를 모두 곱하는 예제입니다.

from functools import reduce

numbers = [1, 2, 3, 4]

# lambda와 reduce 사용
product = reduce(lambda x, y: x * y, numbers)

# 결과 출력
print(product)

결과

24

설명

  • reduce 함수는 리스트의 요소를 누적하여 계산합니다.
  • lambda x, y: x * y는 이전 값과 현재 값을 곱하는 익명 함수입니다.
  • 이를 통해 리스트의 모든 요소를 한 번에 처리할 수 있습니다.

6. lambda와 함께 사용하는 주요 함수 정리

Python에서는 lambda와 함께 사용하면 유용한 함수들이 많습니다. 아래는 그중 몇 가지를 정리한 표입니다.

함수 역할 예제 코드
map 리스트의 각 요소에 함수 적용 map(lambda x: x+1, [1, 2, 3])
filter 조건을 만족하는 요소만 반환 filter(lambda x: x > 2, [1, 2, 3])
sorted 정렬 기준 지정 sorted(data, key=lambda x: x[1])
reduce 누적 계산 reduce(lambda x, y: x*y, [1, 2, 3])

7. lambda 사용 시 주의점

  1. 코드 가독성: lambda는 간단한 작업에 적합하지만, 너무 복잡한 계산식이 들어가면 가독성이 떨어질 수 있습니다. 복잡한 로직은 일반 함수를 사용하는 것이 더 좋습니다.
  2. 디버깅 어려움: lambda 함수는 이름이 없기 때문에 디버깅이 어려울 수 있습니다. 디버깅이 필요하다면 이름 있는 함수를 사용하는 것이 좋습니다.

요약: lambda를 활용해 코드 간결화하기

Python의 lambda는 간단한 함수 선언을 대체하고, 다양한 작업을 한 줄로 처리할 수 있는 강력한 도구입니다. 특히 map, filter, sorted, reduce와 함께 사용하면 불필요한 코드 줄을 줄이고 간결한 코드를 작성할 수 있습니다.

lambda는 다음과 같은 상황에서 유용합니다:

  1. 간단한 계산: 한 줄로 작성할 수 있는 작업
  2. 일회성 함수: 함수 이름이 필요 없는 경우
  3. 함수형 프로그래밍: map, filter, reduce와 같은 함수와 함께 사용

이제 lambda를 사용해 코드를 더 간결하고 효율적으로 만들어보세요!

+ Recent posts