[Python] lambda(익명함수)
27 Jan 2020
Reading time ~2 minutes
lambda
는 단일문으로 표현되는 익명함수입니다.
코드 상에서 여러 번 반복되지 않고, 한 번만 사용되는 기능이 있을 때 1회성으로 만들어 사용합니다.
# 간단히 입력된 값의 제곱을 구하는 함수의 예시
square = lambda x : x ** 2
print(type(square))
print(square(5))
# 출력:
<class 'function'>
25
# 함수로 두 변수의 합을 정의
def add(x, y):
return x + y
# 익명함수로 두 변수의 합을 정의
add2 = lambda x, y : x + y
# 두 결과는 결국 동일하다
print(add(10, 20))
print(add2(10, 20))
# 출력:
30
30
# 문자열의 길이를 구하는 함수
def str_len(s):
return len(s)
# 함수를 사용해서 문자열 길이 기준으로 정렬하기
strings = ['bob', 'charles', 'alexander', 'teddy']
strings.sort(key = str_len)
print(strings)
# 익명함수를 사용해서 정렬하기
strings = ['bob', 'charles', 'alexander', 'teddy']
strings.sort(key = lambda x : len(x))
print(strings)
# 출력:
['bob', 'teddy', 'charles', 'alexander']
['bob', 'teddy', 'charles', 'alexander']
filter, map, reduce
위의 3개 함수는 내부에서 lambda를 유용하게 사용하는 대표적인 함수입니다.
filter
: 특정 조건을 만족하는 요소만 남기고 필터링하는 함수입니다.
# 짝수면 True를 반환하는 함수
def even(n):
return n % 2 == 0
# 함수를 사용하여 리스트에서 짝수만 출력하기
nums = [1, 2, 3, 6, 8, 9]
print(list(filter(even, nums)))
# 익명함수를 사용하여 리스트에서 짝수만 반환하기
print (list(filter(lambda n : n % 2 == 0, nums)))
# 출력:
[2, 6, 8]
[2, 6, 8]
map
: 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환하는 함수입니다.
# 주어진 리스트의 숫자의 제곱을 리스트로 반환하기
nums = [1, 2, 3, 4, 5]
a = list(map(lambda x : x ** 2, nums))
print(a)
# 출력:
[1, 4, 9, 16, 25]
nums = [1, 2, 3, 4, 5]
# 짝수면 True를 반환하는 함수
def even(n):
return n % 2 == 0
# 리스트 값의 짝수 여부 반환
a = list(map(even, nums))
print(a)
# 익명함수를 사용하여 짝수 여부 반환하기
a = list(map(lambda x : x % 2 ==0, nums))
print(a)
# 출력:
[False, True, False, True, False]
[False, True, False, True, False]
reduce
: 차례대로 앞 2개의 원소를 가지고 연산. 연산의 결과가 또 다음 연산의 입력으로 진행됨. 따라서 마지막까지 진행되면 최종 출력은 한개의 값만 남게하는 함수입니다.
from functools import reduce
a = [1, 3, 5, 8]
# 리스트 내의 모든 숫자의 합을 구하기
reduce(lambda x, y : x + y, a)
# 출력:
17
Reference
- 패스트캠퍼스 파이썬 강의