lambda
간편하게, 한줄로 함수를 만들어서 쉽게 쓸 수 있다.
아래는 일부러 2개의 인자를 받도록 lambda 함수를 만들고, 인자를 1개만 줘보았다.
positional argument 'y' 가 missing 되었다고 TypeError를 띄워준다
func = lambda x,y : x+y
func(10)
func = lambda x,y : x+y
list(map(func, [1,2],[2,3] ) )
# [3,5]
list(map(func, (1,2),(2,3)))
# [3,5]
2개의 인자를 받는 lambda 식에서 map으로 인자를 주려면 어찌줘야할까.. 해봤다
zip도 안먹히고, 하나로 묶으니 안먹힌다
아무래도 map함수자체가 iterable한 녀석한테 적용해주려다보니 이렇게 되는것같다.
a=[150,130, 80,60, 40,30, 20,15, 5,5]
list(map(lambda x:
'A' if x > 100
else 'B' if x>50
else 'C' if x>25
else 'D' if x>10
else 'E', a))
# ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E']
lambda 안에서 굳이 이런식으로 if, else를 계속 쓸 수 있다.
filter
반복 가능한 객체에서 특정 조건에 맞는 요소만 가져온다.
filter에 지정한 함수의 반환값이 True일 때에만 해당 요소를 갖고오는것
a=[150,130, 80,60, 40,30, 20,15, 5,5]
list(filter(lambda x : x%30==0 , a))
# [150, 60, 30]
30으로 나누어 떨어지는수 (30의 배수)인 녀석들만 출력하도록 하였다
reduce
반복가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적하여 반환
from functools import reduce
a=[150,130, 80,60, 40,30, 20,15, 5,5]
reduce(lambda x,y : print(x,y) , a)
'''
150 130
None 80
None 60
None 40
None 30
None 20
None 15
None 5
None 5
'''
reduce(lambda x,y : x+y , [1,2,3,4,5,6,7,8,9])
# 45
맨 처음 람다의 인자로 index 0, 1이 주어진 후 그 뒤로는 y에만 전달된다.
그런데 굳이.. list의 컴프리헨션이 가능한 상황에서... 이걸 쓸 필요가 있을까 싶긴하다.
'Python' 카테고리의 다른 글
Python Decorator에 대하여 @ 데코레이터 (0) | 2021.06.14 |
---|---|
Python Generator 제너레이터, yield (0) | 2021.05.11 |
Global에 대하여 (0) | 2021.05.11 |
Object-Oriented Programming (0) | 2021.05.11 |