람다표현식 ( Lambda expression )
람다함수는 "익명(Annoymous)함수"라고 표현합니다. 말그대로 이름이 없는 함수를 뜻합니다. 간결하고 직관적인 코드로 가독성이 좋아집니다.
특히 map, reduce, filter 함수와 함께 많이 사용됩니다. 함수를 정의하지 않고 익명함수로 대체 하여 간결한 코드를 작성할 수 있습니다. lambda 키워드를 사용하여 람다함수를 사용합니다.
lambda 이해
>>> fruits = ['banana', 'apple', 'melon']
위 과일 리스트를 모두 대문자로 치환하는 로직을 구현해봅니다.
1. for 를 이용한 방식
>>> result = [x.upper() for x in fruits]
>>> result
['BANANA', 'APPLE', 'MELON']
함수를 통해 로직처리를 하는경우 map을 사용합니다.
2. map을 이용한 방식
>>> def upper_str(x):
return x.upper()
>>> result = list(map(upper_str, fruits))
>>> result
['BANANA', 'APPLE', 'MELON']
간결한 처리를 위해 함수를 정의치 않고 익명함수를 사용하여 처리할 수 있습니다.
3. lambda를 이용한 방식 ( map, filter, reduce )
map
>>> result = list(map(lambda x: x.upper(), fruits))
>>> result
['BANANA', 'APPLE', 'MELON']
익명함수로 upper_str 함수를 대체하여 사용하여 더 간결해졌다.
filter
number_list = [5, 2, 9, 10, 3, 7, 6]
>>> result = list(filter(lambda x: (x % 2 == 0), number_list))
>>> result
[2, 10, 6]
reduce - 1부터 10까지 더한 값.
>>> reduce(lambda x, y: x+y, range(1, 11))
55
lambda에 삼항연산 조건식 적용
과일이름, 가격을 갖는 2차원 배열에서 과일 가격이 3000원 이상인 과일을 20% 할인 가격으로 map을 적용해본다.
>>> fruits = [ ['banana', 1000], ['apple', 1100], ['melon', 5000] ]
>>> result = list(map(lambda x: x if x[1] > 0 and x[1] < 3000 else ([x[0], x[1] * (1 - 0.2)]), fruits))
>>> result
[['banana', 1000], ['apple', 1100], ['melon', 4000.0]]
객체화 하여 사용
>>> _sum = lambda x, y: x + y
>>> _sum(125, 50)
175
람다표현식 다이렉트 호출
>>> (lambda x, y: x + y)(125, 50)
175
반응형
'python' 카테고리의 다른 글
Python - BeautifulSoup 객체(ResultSet, Tag) Dict, XML로 변환하기 (0) | 2021.02.08 |
---|---|
pip install error - after connection broken by 'ProxyError (0) | 2021.01.20 |
Python - 초간단 디렉토리 및 파일 생성, 복사하기 ! (0) | 2021.01.11 |
RuntimeError: The current Numpy installation fails to pass a sanity check due to a bug in the windows runtime. (0) | 2020.12.20 |
Python - XML 파싱 오류 해결 ( xml.etree.ElementTree.ParseError ) (1) | 2020.12.07 |