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

+ Recent posts