Lambda 표현식 이란?
Java에서도 똑같이 Lambda 표현식이 있으며 Java 1.8 부터 지원하게 되었다.
즉 "익명함수"라고 하며 보통 함수명을 붙여서 함수를 만들지만 재사용성이 없으며 1급함수를 다룰때는 Lambda가 유용할 수 있다.
Lambda 표현식 쓰는 법
def add_ten(x):
return x + 10
lambda x: x + 10
즉 일반적으로는 def 함수명(parameter): 과 return 으로 이루어진다.
하지만 lambda는 익명이므로, lambda parameter: statement 또는 표현식의 경우 return 값이 된다.
일반적인 함수와 매핑을 해보면 def -> lambda (parameter): -> parameter: return -> 생략하고 바로 return값.
또한 중요한 것은 lambda 에서 expression 부분은 무조건 1개만 가능하다. 여러개를 사용할 수 없다.( colon(;) 으로 구분해도 안된다. )
Lambda 사용 예시
Lambda의 기본적인 사용예시를 아래에 설명한다.
- 만약 일반 함수처럼 이름(reference)을 할당 하고 싶다면.
- add_ten = lambda x: x+10
- 하지만 이는 이렇게 된다는 것만 알것. PEP8에서 assignment(=)와 함께 lambda를 쓸려면 def를 쓰라고 강력 권고하고 있음.
- lambda *args, **kwargs: None
- 어떤 parameter가 오더라도 None을 return하라는 의미임.(즉 아무것도 하지 마라.)
- 아래와 동일한 코드임.
def do_nothing(*args, **kwargs):
passs
Lambda 자주 사용하는 용법
실제 개발할때 가장 많이 사용하는 lambda case이다. map, filter, sorted 시에 list와 함께 쓰인다.
map, filter, sorted, list 와 함께 사용
map은 말그대로 매핑하는 기능을 수행하는 built-in 함수이다.
map(function, iterable, ...) 의 signature 이며, function은 매핑Rule이다. 그리고 iterable은 보통 list가 들어오며
iterable로 들어온 대상의 항목을 하나씩 매핑하라는 뜻이다.
따라서 map(대문자바꾸는 함수, ['a', 'b', 'c']) 이렇게 하면 ['A','B','C'] 가 나온다.
map(lambda x: x.upper(), ['a', 'b', 'c']) => 이거 자체도 map함수이며 list로 할려면,
list(map(lambda x: x.upper(), ['a', 'b', 'c'])) 이렇게 하면 ['A', 'B', 'C']가 나온다.
filter(function, iterable...) 도 필터링하는 built-in 함수이다.
즉, 필터링을 하되 어떻게 필터링해라라는 것이 function으로 오고, iterable은 필터링할 대상이다.
예를 들면 아래와 같다.
list(filter(lambda x: 'o' in x, ['cat', 'dog', 'cow']))
즉, x 가 in x 로 사용되므로 iterable이고 그게 바로 다음 parameter이다. 그리고 x 안에 알파벳 'o' 있으면 True임.
따라서 눈치챘겠지만 function은 boolean을 return하는 함수이어야 한다.
sorted 도 정렬된 객체를 새로 만드는 built-in 함수이다.
sorted(iterable, function..) 이 된다.
즉 sort할 대상 iterable이며 해당 iterable에서 정렬할 로직이 function이 된다.
ids = ['id1', 'id2', 'id30', 'id3', 'id22', 'id100']
sorted_ids = sorted(ids, key=lambda x: int(x[2:]))
상기 예는 ids를 정렬해서 새로운 sorted_ids를 만들으라는 것인데 정렬로직은 x: int(x[2:]) 이다.
즉 iterable x 가 들어오면 세번째(포함)이후가 key value가 된다. 해당 값으로 정렬하라는 것이며
위 예의 경우는 id를 뺀 세번째 1,2,30,3,22,100 으로 정렬하라는 것이다.
즉 return은 ['id1', 'id2', 'id3', 'id22', 'id30', 'id100'] 이 된다.
'Python' 카테고리의 다른 글
Python Celery Task Monitoring (0) | 2019.10.08 |
---|---|
Celery from scratch (0) | 2019.05.20 |
Python - Monkey Patch (1) | 2019.05.02 |
Python Excel to MySQL (0) | 2019.04.12 |
Database 정보 CSV 작성방법 (0) | 2019.04.10 |