람다 표현식(Lambda expression)이란?
람다 표현식은 함수를 사용하는 또 하나의 방법입니다.
기본적으로 파이썬 외의 다른 몇몇 언어도 지원하는 문법이며 JS의 Arrow function과도 비슷한 부분이 있습니다.
형태가 단순하기 때문에 매개변수로 함수를 써야 할 때 자주 사용합니다.
특징
1. 익명 함수(Anonymous function)라고 부르기도 한다.
- 람다 표현식은 이름이 없는 함수를 만들기 때문에 람다 표현식으로 만든 함수를 익명 함수라고 부르기도 합니다.
2. 함수 내에 로직을 삽입할 수 없다.
- 람다 표현식은 반드시 한 줄로 표현되어야 하기에 반환부를 제외한 다른 로직을 삽입할 수 없습니다.(단, 조건문은 사용 가능합니다. 이는 아래 사용법 문단에서 다루겠습니다.)
3. 변수에 할당해서 재사용 할 수 있다. 하지만 권장하는 방법은 아님
- 기본적으로 한 번 사용하면 소실되지만 변수에 할당하여 여러번 재사용할 수도 있습니다. 다만 권장하는 방식은 아닙니다. flake8 공식 문서에 따르면 디버깅시 수월한 추적을 위해 재사용이 필요한 함수는 def로 선언하기를 권장하고 있습니다.
사용법
람다 표현식은 다음과 같이 사용합니다.
lambda 매개변수 : 리턴값
첨언하자면 매개변수는 생략할 수 있습니다. 그럴 경우 lambda : 리턴값 의 형태로 사용하시면 됩니다.
(리턴값은 생략할 수 없으며 반드시 무언가를 반환해야만 합니다.)
이렇게 보면 감이 잘 안 오실테니 def와 직접적인 비교를 해 봅시다.
def plus(x, y):
return x + y
lambda x, y: x + y
def로 선언한 plus 함수와 아래의 람다 표현식 함수는 동일하게 동작합니다.
def plus(x, y):
return x + y
print(plus(1, 10)) # 11 출력
print((lambda x, y: x + y)(1, 10)) # 11 출력
람다 표현식은 (람다 표현식)(매개변수)의 형태로 실행할 수 있습니다.
매개변수가 존재하지 않을 경우 (람다 표현식)()의 형태로 실행하시면 됩니다.
print((lambda x: "x는 10보다 큽니다." if x > 10 else "x는 10 이하입니다.")(8))
print((lambda x: "x는 10보다 큽니다." if x > 10 else "x는 10 이하입니다.")(11))
# 출력
x는 10 이하입니다.
x는 10보다 큽니다.
앞서 말씀드렸다시피 람다 표현식에 if를 사용해서 리턴값을 정해줄 수도 있습니다.
이 경우
lambda 매개변수 : 참일때 리턴값 if 조건 else 거짓일때 리턴값
의 형태로 선언하시면 됩니다. 단 elif는 사용할 수 없습니다.
람다 표현식은 사실상 매개변수로서 가장 많이 활용하게 됩니다.
_list = [1, 2, 3, 4, 5]
_list = map(lambda x: x + 10, _list)
for i in _list:
print(i) # 11, 12, 13, 14, 15
위 코드는 map 함수를 이용하여 리스트의 모든 값에 10씩 더해주는 코드입니다.
map 함수의 첫 인자로 람다 표현식을 사용하여 값들을 더해주는 모습입니다.
이처럼 재사용이 필요하지 않고 간단한 로직을 적용할것이라면 매개변수로 함수를 전달할 때 람다 표현식을 사용하는게 좋습니다.
'파이썬' 카테고리의 다른 글
파이썬(python) - 아나콘다(Anaconda)란? (0) | 2021.07.20 |
---|---|
파이썬(Python) - 가상 환경(Virtual Environments) (0) | 2021.07.03 |
파이썬(python) - 제너레이터(Generator) (1) | 2020.12.28 |
파이썬(python) - 이터레이터(Iterator) (2) | 2020.12.28 |
파이썬(python) - MRO(Method Resolution Order) (9) | 2020.12.12 |