lambda 매개변수 : 매개변수를 활용한 표현식
일반 함수에서와 같이 매개변수 주위에 대괄호를 사용하지 않는다는 점에 유의
① 람다키워드 ②매개변수(또는 바운드 변수) 및 ③ 함수 본체
ex)
adder = lambda x, y: x + y
print (adder (1, 2))
string='some kind of a useless lambda'
print(lambda string : print(string))
x="some kind of a useless lambda"
(lambda x : print(x))(x)
(lambda x: x + x)(2)
map() 함수는 iterable의 각 요소를 fuction 함수로 처리해서 결과를 리턴하는 내장함수
items = [1.2, 2.5, 3.7, 4.6]
r = map(int, items)
print(r) # <map object at 0x10e6cf160>
print(list(r)) # [1, 2, 3, 4]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))
map() 함수는 이터레이터를 리턴하기 때문에 요소들을 한번에 보고싶으면 list()로 감싸서 리스트로 만들어주면 된다.
a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
list(map(lambda x, y: x * y, a, b))
filter는 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져오는데, filter에 지정한 함수의 반환값이 True일 때만 해당 요소를 가져옵니다.
def f(x):
return x > 5 and x < 10
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(f, a))
[8, 7, 9]
마지막으로 reduce를 사용해보겠습니다. reduce는 반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수입니다(reduce는 파이썬 3부터 내장 함수가 아닙니다. 따라서 functools 모듈에서 reduce 함수를 가져와야 함.
from functools import reduce
reduce(함수, 반복가능한객체)
def f(x, y):
... return x + y
...
>>> a = [1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(f, a)
15
reduce의 반환값이 15가 나왔습니다. 함수 f에서 x + y를 반환하도록 만들었으므로 reduce는 그림과 같이 요소 두 개를 계속 더하면서 결과를 누적합니다.
max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
=> lambda 인자: 식1 if 조건식 else 식2
# map을 사용하여 리스트 a에서 3의 배수는 문자열로 리턴
items = [0, 1, 2, 3, 4, 5]
print(list(map(lambda x: str(x) if x % 3 == 0 else x, items)))
['0', 1, 2, '3', 4, 5]
Lambda는 일반적으로 다음 Python 내장 기능과 함께 사용
Filter: filter(람다 매개변수: 표현식, 반복 가능한 시퀀스)
Map: map(람다 매개변수: 표현식, 반복 가능한 시퀀스)
Reduce: reduce(람다 매개변수 1, 매개변수 2: 표현식, 반복 가능한 시퀀스)