본문 바로가기
[Language] - Python

#9. lambda, map, reduce, filter

by Bebsae 2021. 3. 25.

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

댓글