Python 에서의 Lambda method

파이썬에서 람다(lambda) 함수는 익명의 함수를 생성하는 방법 중 하나로 일반적인 함수와 다르게 함수 이름이 없고, 한 줄로 함수를 작성할 수 있다.
람다 함수는 주로 간단한 함수를 정의할 때 사용되며, 함수를 매개변수로 받는 함수나 리스트/딕셔너리 등의 컨테이너 객체를 다룰 때 유용하게 사용된다.

기본적인 형식
lambda 인자(arguments) : 표현식(expressions)

인자는 함수에 입력될 매개변수를 나타내며, : 뒤의 표현식은 함수가 반환할 값을 나타낸다.
그리고 표현식의 결과를 return 키워드 없이 자동으로 return 해준다.

함수에 이름이 없기에 다시 사용할 수는 없으나, 람다함수도 객체이므로 정의와 동시에 변수에 담아 재사용할 수 있다.
다음은 두 개의 숫자를 더하는 람다 함수로 add 변수에 람다 함수를 저장해서 사용한다.

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

람다 함수는 다른 함수의 인자로 전달되거나, 함수 내에서의 간단한 역할을 수행하는 경우 유용하다.

람다 함수 사용 예시

map() 에서의 lambda 사용 예

'map()'함수는 시퀀스의 모든 요소에 함수를 적용하고, 그 결과를 새로운 이터레이터(iterator) 객체로 반환하는 파이썬 내장 함수이다.

map() 함수에서 일반 함수를 사용한 예제

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


def add_two(x):
    return x + 2

result = list(map(add_two, numbers))
print(result)
#--> [3, 4, 5, 6, 7]

map() 함수에서 lambda 함수를 사용한 예제

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


result_lambda = list(map(lambda x: x + 2, numbers))
print(result_lambda)
#--> [3, 4, 5, 6, 7]

reduce() 에서의 lambda 사용 예

'reduce()' 함수는 리스트, 튜플 등의 시퀀스 자료형에 대해 주어진 함수를 이용해 누적 계산을 수행하는 함수이다.

reduce() 함수에서 일반 함수를 사용한 예제

from functools import reduce

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


def multiply(x, y):
    return x * y

result = reduce(multiply, numbers)

print(result)
#--> 120

reduce() 함수에서 lambda 함수를 사용한 예제

from functools import reduce

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


result_lambda = reduce(lambda x, y: x * y, numbers)
print(result_lambda)
#--> 120

filter() 에서의 lambda 사용 예

'filter()' 함수는 주어진 함수를 사용하여 iterable에서 원하는 요소를 필터링하는 데 사용된다.
'filter()' 함수는 두 개의 인수를 취한다. 첫 번째 인수는 필터링 함수이고, 두 번째 함수는 필터링할 iterable이다.

filter() 함수에서 일반 함수를 사용한 예제

def negative_num(num):
    return num < 0

my_list = [-1, 2, -3, 4, -5, 6, -7, 8, -9]

filtered_list = list(filter(negative_num, my_list))
print(filtered_list)
#--> [-1, -3, -5, -7, -9]

filter 함수에서 lambda 함수를 사용한 예제

my_list = [-1, 2, -3, 4, -5, 6, -7, 8, -9]


filtered_list_lambda = list(filter(lambda x: x < 0, my_list))
print(filtered_list_lambda)
#--> [-1, -3, -5, -7, -9]

람다 함수는 간단하게 작성할 수 있기 때문에 코드 가독성을 높일 수 있지만 코드가 복잡해지는 경우, 일반적인 함수를 작성하는 것이 더 바람직할 수 있다.

또한 람다 함수에서도 타입 힌팅(Type hinting)을 사용할 수 있다.

from typing import List

# List[int] 타입의 매개변수를 받는 람다 함수
squared = lambda numbers: [n**2 for n in numbers]   # type: List[int] -> List[int]

result = squared([1, 2, 3, 4, 5])
print(result)

List[int] 타입이 매개변수를 받는 람다 함수를 정의하고, List[int] -> List[int] 타입 힌팅을 적용했다.
하지만 람다 함수는 일반적인 함수보다 코드가 간결하므로, 타입 힌팅을 추가하면 코드가 복잡해질 수 있다.
따라서 람다 함수에서 타입 힌팅을 시작할 때는 코드의 간결성과 가독성을 고려하여 사용하는 것이 좋다.

 

 

'Python > Python' 카테고리의 다른 글

First Class Function  (0) 2023.03.30
파이썬에서 Function과 method의 차이  (0) 2023.03.20
참조에 의한 변수와 객체 연결  (0) 2023.01.11
Python에서 집합을 사용하는 이유  (0) 2023.01.10
불변성과 문자열 수정  (0) 2023.01.06