[Python] Lambda(람다) 함수
- Python/기초
- 2020. 4. 12.
Lambda 함수로 함수의 남발(?)을 줄여봅시다.
Lambda 함수는 단일문으로 표현되는 익명함수입니다. 즉, 이름의 정의 없이 구현만으로 존재하는 함수를 뜻합니다.
함수를 작성하다보면 한문장으로 끝나게 되는 함수가 종종 생기는데 그런 함수를 만들지 않고 람다 함수를 이용할 수 있습니다.
def square(x):
return x**2
x의 제곱을 만들면 함수가 굳이 있을 필요가 없을정도로 짧습니다.
이럴 때 람다 함수를 사용합니다.
square = lambda x:x**2 # 파라미터 : 결과
간단하게 할 수 있습니다.
보통 람다함수는 리스트 정렬이나 필터, 간단한 연산처리에 쓰입니다.
리스트 정렬
strings = ['abcd','edfge','tereaas','fef']
strings.sort(key=lambda s:len(s))
print(strings)
리스트를 정렬하려고 하는데 리스트의 원소의 길이로 정렬을 하고 싶어서 람다를 이용해 정렬을 해보았습니다.
리스트가 글자갯수 순으로 정렬된 것을 볼 수 있습니다.
필터(filter)
리스트에서 필요한 원소만 뽑아서 다시 리스트하는 과정을 람다함수를 이용해 해보겠습니다.
nums = [1,2,3,4,5,6,7,8,9,10]
list(filter(lambda n:n%2==0,nums))
nums 에서 짝수만 뽑아서 다시 리스트를 만들었습니다. 람다를 이용해 간편하게 할 수 있습니다.
map
map 을 이용하면 기존 리스트를 가지고 새로운 규칙을 가진 리스트로 재탄생시킬 수 있습니다.
그런 과정에 람다를 쓰면 편리하게 쓸 수 있습니다.
nums = [1,2,3,4,5,6,7,8,9,10]
list(map(lambda n:n**2,nums)) # map(함수,리스트)
map 을 이용해 nums 의 제곱수를 모은 리스트를 다시 만들었습니다. 만약 람다를 쓰지 않는다면
빈 리스트를 만들고 for 구문을 이용해 제곱수를 만들고 빈 리스트에 다시 넣어야 하겠지만 그런 과정 없이 효율적으로 쓸수 있습니다.
if-else
조건문도 가능합니다.
example = lambda x : x**2 if x>5 else x
print(example(10),example(3))
주어진 리스트에 lambda를 적용해 새로 리스트를 만들기 위해서는 map을 이용해야 합니다.
nums = [1,2,3,4,5,6,7,8,9,10]
list(map(example,nums))
이밖에도 다양한 방법들이 있지만 자신이 쓰기 나름입니다. 람다가 항상 함수라는 것을 기억하고 쓰면 다방면에 효율적으로 쓸 수 있습니다.
'Python > 기초' 카테고리의 다른 글
[Python] 클래스 선언과 상속 (0) | 2020.04.16 |
---|---|
[Python] 간단 용어 정리 (0) | 2020.04.14 |
[Python] 전역변수, 지역변수 (0) | 2020.04.09 |
[Python] 함수 (0) | 2020.04.07 |
[Python] for 반복문 (0) | 2020.04.03 |