파이썬으로 코테를 진행하다보면 정말로 많이 쓰게 되는 것 중 하나이다.
그래서.. 맨날 찾아보는 것은 좀 그래서
각잡고 공부하려고 한다.
람다는 함수를 빨리 만드는 방법 중 하나다.
def로 정의할 필요 없이 빨리 정의 된다.
def func(x):
return x + 100
func(1)
->101
100을 더하는 함수를 만드려면 저렇게 써야 한다.
뭐 나쁘진 않다.
만약 람다로 바꿔버리면???
lambda x: x + 100
1줄로 끝난다.
2줄이 1줄이 된다.
하지만 람다는 저렇게 쓰는 것이 아니다.
사실 일회용 함수의 색이 좀 짙다.
여러 번 재사용할 메서드가 아니라 잠시 동안만 쓸 메서드에 적용되는 성향이 좀 있다.
이것을 람다 호출이라고 말하는데.. 뭐 용어야 아무래도 좋다. 어떻게 쓰이는지 보자
(lambda x: x + 100)(1)
-> 101
음...? def로 정의 내린 함수와 마찬가지로 () 괄호 안에 인수가 들어간다. 그리고 역할을 제대로 수행한다.
그래 그건 그런데 꼭 람다 안써도 되잖아?
꼭 써야 하나??
뭐 굳이 안써도 된다..하지만 람다는 그 혼자 쓰일 때 보다
다른 것과 같이 쓰일 때 빛난다.
바로 map, filter 함수이다.
map에선 if + else 문과 같이 쓰일 수 있는데 정말 효과적이다.
예를 들어서 짝수를 찾는 프로그램이라고 하자.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: x*0 if x % 2 == 0 else x, a))
-> [1, 0, 3, 0, 5, 0, 7, 0, 9, 0]
형식은
lambda x : (if문이 참일 때 x에 적용하고 싶은 효과) if ... else (거짓일 때 적용하고 싶은 효과) , iterable 객체
**람다표현식 안에서의 조건문은 : 콜론을 붙이지 않는다.
**람다표현식 안에서의 조건문에서는 else문을 써주어야 에러가 안난다.
(이 점이 우리가 평소에 쓰는 조건문과는 조금 다른 점이다)
**람다 표현식 안에서는 elif 를 쓸 수 없다. (솔직히 elif 쓸거면 간단한 메서드가 아닐 것이다. def쓰자 그냥)
정말 쉬워진다.
정말 간단해진다.
논리적이어진다.
map에는 iterable 객체를 여러개 넣을 수 있다. 따라서.. 람다 표현식도 그것이 가능해진다.
a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
list(map(lambda x, y: x * y, a, b))
->[2, 8, 18, 32, 50]
다음엔 filter인데
내가 보기엔 얘가 조금 더 실용적이다.
filter는 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져오는 메서드다.
즉, filter에 지정한 함수의 반환값이 True일 때만 해당 요소를 가져온다.
**여기서 지정한 함수가 람다가 될 수 있다는 말이다.
형식은
filter( lambda x: filter하고 싶은 조건 , iterable 객체)
짝수만 필터가 되게 해볼까?
def f(x):
return x%2 == 0
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(f, a))
[8, 2, 10, 0]
**함수가 boolean 값을 return 해야한다.
나쁘지 않다. 만약 람다를 쓴다면??
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(lambda x: x%2 == 0, a))
[8, 2, 10, 0]
더 짧아졌다. 람다표현식을 아는 사람에겐 더 직관적이기도 하다.
번외로
sorted에서도 key로써 많이 쓴다.
아래 문제는
의 문자열 정렬 문제다.
key를 람다표현식으로 썼다.
def solution(strings, n):
# strings의 n 번째 항목을 조사해서 정렬하기
# key 정렬과 lamda를 활용해서 정렬
strings = sorted(strings) # 사전적으로 미리 정리해야 입출력 예2와 같음
answer = sorted(strings, key=lambda x: x[n])
return answer
'프로그래밍 지식 > Python' 카테고리의 다른 글
Regular expression,정규표현식, 문자열파싱,처리 [Python] (0) | 2021.03.06 |
---|---|
파이썬과 아나콘다 그리고 주피터노트북 Python & Anaconda, Jupyter Notebook; Window, 윈도우 (0) | 2021.01.05 |
[Python] permutations() 라이브러리 이용하기 (0) | 2020.07.29 |
[Python] Counter 라이브러리 이용하기 (0) | 2020.07.29 |
[Python]TypeError: expected string or bytes-like object(정규표현식 에러) (0) | 2020.07.27 |