[Python] lambda function - 파이썬 람다(Lambda)함수
python lambda function - 파이썬 람다(Lambda)함수
람다(Lambda)함수
lambd는 함수 를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
일반 함수를 한줄로 간결하게 만들 때 사용된다.
def를 사용할 정도로 복잡하지 않거나 def를 사용할 수 없을 때 쓰인다.
lambda 매개변수1, 매개변수2, ... : 매개변수를 사용한 표현식
>>> add = lambda a,b : a+b
>>> result = add(3,4)
>>> print(result)
add는 두 개의 인수를 받아 서로 더한 값을 돌려주는 lambda함수.
>>> def add(a,b):
return a+b
>>> result = add(3,4)
>>> print(result)
위 lambda를 사용한 함수와, def를 사용한 함수는 같은 결과(7)를 내는 코드이다.
Key
특히 딕셔너리는 순서가 없기 때문에 정렬을 위해서 lambda사용을 한다.
간단한 딕셔너리를 만들고
>>> data = [{'first':'김', 'last':'은지', 'yyyy':1956},
{'first':'이', 'last':'영수', 'yyyy':1906},
{'first':'박', 'last':'영희', 'yyyy':1912}]
key라는 매개변수에 아이템을 정렬할 키를 반환해 주는 함수를 지정한다.
>>> sorted(data, key=lambda item: item['first'])
[{'first': '김', 'last': '은지', 'yyyy': 1956},
{'first': '박', 'last': '영희', 'yyyy': 1912},
{'first': '이', 'last': '영수', 'yyyy': 1906}]
first의 한글 순서대로 정렬이 된 것을 볼 수 있다.
>>> sorted(data, key=lambda item: item['last'])
[{'first': '이', 'last': '영수', 'yyyy': 1906},
{'first': '박', 'last': '영희', 'yyyy': 1912},
{'first': '김', 'last': '은지', 'yyyy': 1956}]
>>> sorted(data, key=lambda item: item['yyyy'])
[{'first': '이', 'last': '영수', 'yyyy': 1906},
{'first': '박', 'last': '영희', 'yyyy': 1912},
{'first': '김', 'last': '은지', 'yyyy': 1956}]
마찬가지로 'last' 와 'yyyy'의 순으로 정렬이 된 것을 확인한다.
map()
map(함수, 리스트)
이 함수는 함수와 리스트를 인자로 받는다.
리스트로 원소를 꺼내서 함수를 적용시킬 수 있고, 그 결과를 새로운 리스트에 담아서 리턴한다.
>>> list(map(lambda x: x ** 2, [1,2,3]) )
[1, 4, 9]
리스트[1,2,3]을 lambda함수 x에 돌려 [1,4,9]를 출력한다.
>>> list(map(lambda x: x ** 2, range(3)))
[0, 1, 4]
range(3)의 리스트 [0,1,2]를 2제곱 해준 [0,1,4]가 출력된다.
reduce()
reduce(함수, 시퀀스)
시퀀스의 값을 누적시킨다.
>>> from functools import reduce
>>> reduce(lambda x, y: x + y, [0, 1, 2, 3])
6
reduce함수는 functools에서 reduce모듈을 import 시켜줘야 사용이 가능하다.
0+1 = 0
0+1 = 1
1+2 = 3
3+3 = 6
이렇게 값이 누적되면서 더해져 출력이 된다.
filter()
filter(함수, 리스트)
리스트에 들어있는 원소들이 함수에 적용시켰을 때 Ture 값들로 리턴이 되는 함수.
>>> list(filter(lambda x: x < 3, [1,2,3,5,7]))
[1, 2]
리스트 [1,2,3,5,7] 중 x가 3보다 작은 값이 리스트로 출력된다.