람다 함수는 익명 함수를 말합니다. 익명 함수를 사용하는 이유는, 함수의 기능이 간단한 경우에 해당 함수를 간결한 코드만으로 사용하기 위함이며, 특히 함수에서 인자로 함수를 요구할 때 많이 사용됩니다.
먼저 기본적인 형태를 살펴보겠습니다.
int_ex = 10
f = lambda x : x * 2
# lambda 입력 : 출력 의 형태. x를 입력받으면, x * 2를 리턴한다.
print(f(int_ex)) # 20
람다 함수는 위와 같이 lambda 입력 : 출력 의 형태로 작성하며, 함수의 이름을 따로 설정하지 않아도 된다는 특징이 있습니다.
(위 코드의 f = lambda 부분의 f는 함수의 이름이 아니라, 람다 함수를 변수명을 통해 넘긴 것일 뿐입니다)
이번에는 람다 함수가 유용하게 사용되는 경우를 살펴보겠습니다. 아래의 두 코드는 리스트의 모든 원소에 2를 곱하는 코드입니다.
list_ex = [1,2,3,4,5,6,7,8,9,10]
# 1
index = 0
for elem in list_ex:
elem *= 2
list_ex[index] = elem
index += 1
# 2
list_ex = list(map(lambda x : x * 2, list_ex))
# map 함수는 iterable의 각 원소에 함수를 적용한 후, map 객체로 리턴한다.
# 따라서 list 함수를 이용해 list로 cast 하였다.
map 함수의 인자로 람다 함수를 사용함으로써 코드가 훨씬 간단해졌습니다.
람다 함수는 간단한 함수의 구현에만 사용하는 것이 권장되지만, 기본적인 if - else 구문 정도까지는 사용이 가능합니다.
(단, elif 구문은 지원하지 않으며, if else 키워드로 해당 구문을 대체할 수 있습니다)
아래는 람다 함수를 이용하여 리스트의 원소가 짝수인 경우에는 2로 나누고, 홀수인 경우에는 1을 더하는 코드입니다.
list_ex = [1,2,3,4,5,6,7,8,9]
list_ex = list(map(lambda x : x / 2 if x % 2 == 0 else x + 1 if x % 2 == 1 else None, list_ex))
# x / 2 리턴 -> x % 2 == 0일 때, 아니면 x + 1 리턴 -> x % 2 == 1일 때, 아니면 None 리턴
위와 같이 lambda 함수에서는 elif 구문을 사용할 수 없으며, 반드시 else ~ 로 끝나야만 합니다. 따라서 x를 2로 나누었을 때의 나머지는 무조건 0 또는 1이지만, else ~ 로 끝나야 한다는 규칙에 의해 else None을 추가하였습니다.
'파이썬(Python) > 문법 내용정리' 카테고리의 다른 글
F-string (가장 강력한 print 방법) (0) | 2021.01.28 |
---|---|
Enumerate 함수 (0) | 2021.01.27 |
Comprehension (List, Set, Dict) (0) | 2021.01.24 |
Sorted 함수 (0) | 2021.01.23 |
# 00. 카테고리 소개 (0) | 2021.01.23 |
댓글