2.1 람다 함수 정의하기
람다 함수, 일명 익명 함수는 이름 없이 한 줄로 간단하게 작성할 수 있는 함수야.
lambda
키워드를 사용해서 만들 수 있어.
def
로 정의되는 일반적인 함수와 달리, 람다 함수는 즉시 만들어지고 보통 한 줄로 간단히 수행될 작업에 사용돼.
람다 함수의 문법은 lambda
키워드 다음에 인자가 오고, 콜론과 표현식이 이어지는 방식이야:
lambda 인자들: 표현식
람다 함수는 어떤 수의 인자도 받을 수 있지만, 표현식은 하나만 가질 수 있어. 이 표현식의 값은 자동으로 반환돼.
예제:
람다 함수 | 일반 함수 |
---|---|
|
|
|
|
|
|
2.2 람다 함수 사용하기
람다 함수는 map()
, filter()
, sorted()
같은 다른 함수와 결합해서 자주 사용돼.
또한 다른 함수의 인자로도 사용될 수 있어.
map()
와 함께 사용하기
map()
함수는 주어진 함수를 각 iterable 요소에 적용해서 결과를 가진 iterator를 반환해.
람다 함수는 map()
와 함께 사용하기에 좋은데, 요소 변환을 위한 함수를 간결하게 정의할 수 있으니까.
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 출력: [1, 4, 9, 16, 25]
filter()
와 함께 사용하기
filter()
함수는 주어진 함수가 True를 반환하는 iterable의 요소들로 이루어진 iterator를 반환해.
람다 함수를 사용하면 필터링 조건을 빠르게 정의할 수 있어.
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]
sorted()
와 함께 사용하기
sorted()
함수는 iterable의 요소들을 정렬해.
람다 함수는 key
인자를 통해 사용자 정의 정렬 기준을 정의하는 데 사용될 수 있어.
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 출력: ['date', 'apple', 'banana', 'cherry']
표현식 안의 람다 함수
람다 함수는 리스트 컴프리헨션이나 딕셔너리 생성기 같은 다른 표현식 안에서도 사용할 수 있어.
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # 출력: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
2.3 람다 함수의 제한사항
람다 함수는 일반 함수와 비교했을 때 몇 가지 제한사항이 있어:
표현식의 제한:
람다 함수는 단 하나의 표현식만 가질 수 있고, if
, else
같은 제어 흐름 명령문이나 반복문을 포함할 수 없어.
문서화 불가:
람다 함수는 문서화 문자열 (docstring)을 포함할 수 없어, 그래서 기능을 문서화하기 어려워.
디버깅의 어려움:
이름과 문서화의 부재로 인해 람다 함수는 일반 함수에 비해 디버깅하기 어려워.
람다 함수의 제한 예제
람다 함수 안에 여러 표현식을 사용하려고 하면 문법 오류가 발생해:
# 이 코드는 오류를 발생시킴
invalid_lambda = lambda x: x ** 2; print(x)
GO TO FULL VERSION