Bunny Code

[Python] - 18) map(), filter() & 람다(lambda) 본문

Python Basic

[Python] - 18) map(), filter() & 람다(lambda)

버즈밴드 2020. 8. 18. 18:34

지금까지 함수를 선언할 때, 빈 괄호를 사용하거나 일반 혹은 가변 매개변수를 사용했는데

이번에는 함수의 매개변수로 함수를 전달해보겠습니다!

(수학에 비유하자면 약간 합성함수 느낌..?? 으로 이해했어요.)

코드 입력 화면
코드 실행 화면

위에서 확인할 수 있듯이, call_10times 라는 함수에 print_true 라는 함수를 전달해, 함수와 함수의 조합을 확인할 수 있었습니다. 

위의 선언한 call_10times 처럼

함수를 매개변수로 전달하는 대표적인 표준 함수로 map() 함수와 filter() 함수가 있습니다. 

 

먼저, map() 함수는 

리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성해주는 함수이고

map(<함수>, <리스트>)

filter() 함수는

리스트의 요소를 함수에 넣고 리턴된 값이 True 인 것으로 새로운 리스트를 구성해주는 함수입니다.

filter(<함수>, <리스트>)

 

말이 좀 어렵죠?? 저도 이해하기 힘들었는데, 위를 보시면 map 과 filter 라는 함수의 괄호 안에 또 다른 함수가 들어가있죠??

합성함수 처럼 map, filter 보다 괄호 안의 함수가 먼저 괄호 안 리스트의 요소를 입력값으로 출력해주고, 

그 출력된 값을 요소로 가지는 리스트를 만들어주는 것이 map, 그리고 출력된 값이 참인 요소들만 리스트로 만들어주는 것이 filter 입니다. 

아직 이해가 안가실 수도 있으니 바로 예제를 통해 확인해볼게요!!

코드 입력 화면
코드 실행 화면

map 함수 실행 결과 <map object> 가 나와 이를 리스트 자료형으로 강제 변환해 출력해봤더니 

리스트의 요소들이 제곱된 것이 출력된 것을 확인할 수 있었습니다. 

마찬가지로 filter 함수 실행 결과 <filter object> 가 나와 이를 리스트 자료형으로 강제 변환해 출력해봤더니

3보다 작은 요소들만 출력된 것을 확인할 수 있었습니다.

 

 

그런데 매개변수로 함수를 전달하기 위해 위의 처럼 함수 구문을 작성하는 것이

(def 로 power, under_3 선언하는 것)

비효율적이라고 판단한 사람들은 '람다' 라는 개념을 생각해냈습니다.

('람다' = 간단한 함수를 쉽게 선언하는 방법)

lambda <매개변수> : <리턴값>

위와 똑같은 코드를 람다를 활용해 입력해보겠습니다.

코드 입력 화면
코드 실행 화면

위의 코드 처럼 lambda 를 활용하면 코드가 훨씬 간결해지는 것을 확인할 수 있습니다. 

추가로, 매개변수가 여러 개인 람다도 만들 수 있습니다. 

ex) lambda x,y : x+y

 

 

'Hello Coding 파이썬' 을 참고하여 작성하였음.

Comments