파이썬에서 람다(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 |