lambda
PYTHON의 lambda expression은 무명메소드로써 함수를 한줄에 정의할 수 있는 장점이 있다.
lambda x, y: x + y
>>
<function <lambda> at 0x000001746FA62AE8>
(lambda x, y: x + y)(10, 20)
>>
30
이 lambda expression을 응횽하는 방법 3가지를 알아볼 것이다.
map
map() 내장함수는 주로 iterator의 타입을 바꾸는데 많은 예를 든다.
list(map(int, (0.1, 9.2, 4.3, 1.3)))
>>
[0, 9, 4, 1]
그러나 실제로 이 코드의 의미는 map(function, iterator)로써 iterator 인스턴스의 각 요소을 function의 인자로 대입하는 것이다. 즉, int() 라는 function의 argument로 0.1, 9.2, 4.3, 1.3을 대입하는 것이다. 이 function자리에 lambda expression을 대입할 수 있다.
t = 0.01
list(map(lambda x: x < t, (0, 1)))
>>
[True, False]
다음과 같은 lambda expression은 arugment로 대입한 요소가 t보다 작은지 검사하는 역할을 한다.
reduce
from functools import reduce
reduce(lambda x, y: print(x, y), [0, 1, 2, 3])
>>
0 1
None 2
None 3
reduce()는 function의 리턴값에 누적하는 역할을 한다. 위 코드와 같이 print()를 찍으면 return된 결과가 없기때문에 None이 뜬다. 즉, return된 결과가 다음 loop에서 동작할 인자로 대입된다.
reduce(lambda x, y: x + y, [0, 1, 2, 3])
>>
6
reduce(lambda x, y: x * y, [5, 1, 2, 3])
>>
30
첫 번째 reduce는 (0 + 1) = 1 // (1 + 2) = 3 // (3 + 3) = 6
두 번째 reduce는 (5 * 1) = 5 // (5 * 2) = 10 // (10 * 3) = 30
filter
filter()는 말그대로 iterator에서 필터링하는 역할을 한다.
filter(lambda x : x < 5, (4, 6))
>>
<filter object at 0x000001746FA78898>
list(filter(lambda x : x < 5, (4, 6)))
>>
[4]
'[Language] - Python' 카테고리의 다른 글
# 11. [Tip] dictionary merge (0) | 2021.04.14 |
---|---|
# 10. [Tip] lambda, map, zip 응용 (0) | 2021.04.01 |
#8. [Tip] if, 삼항연산자가 사용하기 싫을 때 (0) | 2021.03.24 |
#7. zip (0) | 2021.03.24 |
#6. property 데코레이터 (8) | 2021.02.02 |
댓글