[Python] 람다(lambda)함수란?

1. 람다함수란?

 

파이썬 람다(lambda)함수는 익명 함수(anonymous function)라고도 불리며, 간단한 한 줄짜리 함수를 정의할 때 사용합니다.(익명 함수 : 이름이 없는 함수로, 일회성으로 사용되는 함수) 람다 함수는 def 키워드를 사용한 일반 함수와 달리 lambda키워드를 사용하여 정의합니다. 람다 함수는 주로 filter(), map(), sorted() 등의 함수와 함께 사용되며, 함수 인자로 전달되는 경우가 많습니다. 람다 함수는 간단한 경우에 사용하기 좋지만, 복잡한 로직이나 여러 줄의 코드를 처리하기에는 적합하지 않습니다. 이러한 경우에는 일반적인 함수를 사용하는 것이 좋습니다. 람다 함수는 기본적으로 아래와 같은 구조를 가지고 있습니다.

 

  • lambda: 람다 함수를 정의하는 키워드입니다.
  • arguments: 람다 함수에 전달되는 인자들입니다. 쉼표(,)로 구분하여 여러 인자를 전달할 수 있습니다.
  • expression: 인자들을 활용해 계산되는 표현식입니다. 이 표현식의 결과가 람다 함수의 반환 값이 됩니다.

 

>>> lambda arguments: expression

 



2. 람다 함수와 일반 함수의 차이점

 

람다 함수와 일반 함수의 주요 차이점은 다음과 같습니다.

 

  • 람다 함수는 이름이 없지만, 일반 함수는 이름이 있습니다.
  • 람다 함수는 표현식 하나만 사용할 수 있으며, 복잡한 로직을 구현할 수 없습니다. 일반 함수는 복잡한 로직을 구현할 수 있습니다.
  • 람다 함수는 간결한 코드 작성에 유용하지만, 일반 함수는 코드의 가독성과 재사용성을 높이는 데 도움이 됩니다.



3. 람다 함수의 사용 예시

3.1 두 숫자를 더하는 람다 함수

 

아래 코드는 두 개의 인자를 받아 더한 후 결과를 출력하는 코드입니다. 첫 번째 줄에서 두 인자 x와 y 받아 더하는 익명 함수를 생성하고 이를 add 변수에 할당합니다.

 

>>> add = lambda x, y: x + y
>>> result = add(3, 5)
>>> print(result)  

# 출력: 8

 


3.2 문자열의 길이를 반환하는 람다 함수

 

아래 코드는 문자열인 인자를 받아 len()함수를 통해 길이를 세고 결과를 출력하는 코드입니다. 첫 번째 줄에서 인자 s를 받아 len()함수를 통해 길이 값 구하는 익명 함수를 생성하고 이를 length 변수에 할당합니다.

 

>>> length = lambda s: len(s)
>>> result = length("Hello, world!")
>>> print(result)  

# 출력: 13

 


3.3 고차 함수를 사용하는 람다 함수

 

람다 함수는 주로 map(), filter(), reduce()와 같은 고차 함수(higher-order function)에서 사용됩니다. (고차 함수는 다른 함수를 인자로 받아 처리하는 함수입니다. )

 


3.3.1 리스트의 각 요소에 2를 곱하는 람다 함수와 map() 함수를 사용한 경우

 

>>> numbers = [1, 2, 3, 4, 5]
>>> doubled_numbers = list(map(lambda x: x * 2, numbers))
>>> print(doubled_numbers)  

# 출력: [2, 4, 6, 8, 10]

 


3.3.2 리스트에서 짝수만 필터링하는 람다 함수와 filter() 함수를 사용한 경우

 

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
>>> print(even_numbers)  

# 출력: [2, 4, 6, 8]

 


3.3.3  리스트에서 문자열 길이를 찾는 람다함수와 sorted()함수를 사용한 경우

 

>>> names = ['이영희', '김철수', '박영수', '최민지']
>>> sorted_names = sorted(names, key=lambda x: len(x))
>>> print(sorted_names)  

# 출력: ['이영희', '김철수', '박영수', '최민지']