람다는 일반적인 함수와 비교하여 인라인(in-line)으로 작성 가능하다.
또한, 람다 함수는 함수 객체를 반환한다는 장점이 있다.
즉, 함수 객체를 인수로 필요로하는 map 혹은 filter 등의 함수와 함께 사용하여 그 기능을 극대화한다.
# 함수정의
mul = (lambda a, b : a * b)
# 함수호출
result = mul(2, 5)
# 결과출력
print(result)
# 10
# 함수정의
define_word = (lambda word1, define : word1 * define)
# 함수호출
result = define_word('string_',5)
# 결과출력
print(result)
# string_string_string_string_string_
map(func, iterable data type)
형식으로 쓴다.
# 리스트 생성
spelling = ["test1", "test2", "test4 test5", "test3"]
# 람다함수적용
shout_spells = map(lambda item: item + ('!!!'), spelling)
## ==> 괄호 없이 '!!!'만 써도 된다.
## ==> spelling 리스트 내 모든 원소에 '!!!' 문자열을 붙인다.
# 리스트형태로 변환
shout_spells_list = list(shout_spells)
# 결과출력
print(shout_spells_list)
# ['test1!!!', 'test2!!!', 'test4 test5!!!', 'test3!!!']
filter(func, iterable data type)
형식으로 쓴다.
# 리스트 생성
fellowship = ['frodo', 'samwise', 'merry', 'pippin',
'aragorn', 'boromir', 'legolas', 'gimli', 'gandalf']
# 람다함수적용
result = filter(lambda member: len(member) > 6, fellowship)
## => fellowship 리스트에서 문자열 길이 7이상인 원소만 filtering.
# 리스트형태로 변환
result_list = list(result)
# 결과출력
print(result_list)
# ['samwise', 'aragorn', 'boromir', 'legolas', 'gandalf']
reduce(func, iterable data type, initializer=None)
형식으로 사용한다.
reduce
함수는 시퀀스(문자열, 튜플, 리스트)의 각 원소들을 누적하여 함수에 적용시킨다.
예시를 보자.
# functools 모듈 사용
from functools import reduce
# 리스트 생성
ohmygosh = ['o', 'h', 'm', 'y', 'g', 'o', 's', 'h']
# 람다함수적용
result = reduce(lambda item1, item2: item1+item2, ohmygosh)
## ==> 이 예제는 ohmygosh 내 모든 원소들을 차례대로 누적시키면서 더한다.
# 결과출력
print(result)
# ohmygosh
# functools 모듈 사용
from functools import reduce
# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 람다함수적용
result = reduce(lambda item1, item2: item1+item2, one_to_ten)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 더한다.
# 결과출력
print(result)
# 55
"""initializer 적용"""
# functools 모듈 사용
from functools import reduce
# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 람다함수적용
result = reduce(lambda item1, item2: item1+item2, one_to_ten, initializer=100)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 더한다.
# 결과출력
print(result)
# 155
# functools 모듈 사용
from functools import reduce
# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 람다함수적용
result = reduce(lambda item1, item2: item1*item2, one_to_ten)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 곱한다.
# 결과출력
print(result)
# 3628800
# functools 모듈 사용
from functools import reduce
# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 람다함수적용
result = reduce(lambda item1, item2: item2-item1, one_to_ten)
## ==> item1과 item2의 순서를 바꾸면 연산에 적용되는 원소의 순서가 바뀌어 연산된다.
## ==> (10-(...4-(3-(2-1))))
# 결과출력
print(result)
# 5
a = [1, 2, 3, 4, 5]
square_num_list = list(map(lambda num: num**2, a))
print(square_num_list)
# [1, 4, 9, 16, 25]
a = [1, 2, 3, 4, 5]
odd_num = list(map(lambda num: "짝수" if num % 2 == 0 else "홀수", a))
print(odd_num)
# ['홀수', '짝수', '홀수', '짝수', '홀수']
created 11-17-2021.
- 글작성
last modified 11-18-2021.
- reduce 함수 initializer 예시 추가 => 예시 2.2.)
last modified 11-19-2021.
- map, filter 함수 형식 추가
=> 2. map + lambda
=> 3. filter + lambda