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

+ Recent posts