python에는 lambda라는 익명 함수 개념이 존재한다.
일반함수는 재사용을 하기 때문에 메모리에 누적, 저장이 되는 반면, lambda는 이름이 없는 익명함수라서 저장이 되지 않는다.
이런 점 때문에 주로 시퀀스형 전처리 과정에 lambda와 map, reduce, filter 함수를 같이 사용하는 경우가 많다.
이 글에서는 lambda와 map, reduce, filter 함수를 살펴보자.
1. Lambda
pyhton에서는 def를 사용하여 함수를 생성, 호출하는 과정을 지나야 함수를 사용할 수 있다.
이런 과정을 건너뛰어 메모리의 절약과 간편함이라는 장점을 가지고 있는 함수가 lambda 함수이다.
일반적으로
위의 과정을 거쳐 함수가 생성된다.
이에 반해 lambda 함수를 사용할 경우,
한 문장으로 대체할 수 있게 해준다.
return으로 할당할 필요없이 자동으로 결과를 반환하며, 익명함수이기에 함수의 이름을 지정하지 않는다.
물론 객체이기 때문에 정의와 동시에 변수를 담을 수 있으며, 이름이 없는 일회성 함수이기 때문에 재사용이 불가하다.
2. Map
map 함수는 list 혹은 tuple에 있는 모든 원소들이 함수에 의해 수행된 결과를 literable한 객체로 넘겨주는 기능을 한다.
map 함수는 첫 인자로 함수를, 두 번째 인자로 list나 tuple을 받는데, 함수를 받을 때 lambda를 사용하는 경우가 많다.
위에서는 결과값을 list로 형변환하기 위해서 map을 list로 감쌌다.
3. Reduce
reduce 함수는 두 개의 필수인자와 하나의 옵션인자를 가지는데, 함수를 사용하여 iterable한 하나의 값으로 줄인다.
이 때, reduce 함수는 python 내장함수가 아니기에 functools 모듈에서 reduce를 import를 해야한다.
이렇게 되면 reduce_list에서
(1, 2), 3, 4, 5 >> (3, 3), 4, 5 >> (6, 4), 5 >> (10, 5)
이 과정이 순차적으로 실행되어 최종적으로 15가 출력된다.
4. Filter
filter 함수는 원하는 값만을 list 혹은 tuple 형태로 추출하는 함수이다.
첫 번째 인자로 사용되는 함수는 각 처리의 요소에 대해 boolean값을 반환하게 된다.
boolean값이 true이면 결과로 반환할 값에 남기고, false이면 제거한다.
filter 내부 lambda를 통해 list에서 2로 나누었을 때 나머지가 0인, 즉 짝수인 것들만 추출이 된다.
'Studying > Python' 카테고리의 다른 글
6. method overriding, method overloading(메소드 오버라이딩, 메소드 오버로딩) (0) | 2022.03.01 |
---|---|
5. getter, setter, property (0) | 2022.02.27 |
4. 접근 지정자(Access Modifier) (0) | 2022.02.27 |
3. Context manager (0) | 2022.02.19 |
1. Variable Scope (scope, global, nonlocal) (0) | 2022.02.14 |