반응형
람다(lambda) 함수란?
- 리스트 내포, 조건부 표현식 등. 코드를 간결하게 표현해주는 새로운 함수 정의 방법
- lambda로 정의, 함수의 def와 같은 역할
람다 함수의 활용
- 함수의 이름을 정의하지 않고 일회성으로 간편하게 사용
- 함수로 정의할만큼 복잡하지 않을 때 활용
- 따로 변수에 할당하지 않고 바로 표현
- 매개변수의 제한은 없지만 연산은 한줄 표현 제한
람다 함수의 기본 형식
- (lambda 매개변수1, 매개변수2... : 매개변수를 이용한 표현식) (매개변수1, 매개변수2)
사용 예시
if 조건문과 함께 람다 사용
- 함수와 람다함수 사용의 비교 예시
map내장함수와 함께 람다 사용
map함수란?
- 함수명과 리스트들을 전달, 즉 리스트를 함수의 매개변수로 전달 가능
- 함수에 적용한 값을 지닌 map 객체 리턴(반환)
# 맵을 활용하여 리스트를 매개변수로 전달
def func(x):
return x * x
# 함수 호출시 제곱
a = [1, 2, 3]
b = map(func, a)
print( type(b), list(b) )
# 맵 객체 확인, 리스트화하여 b의 전달 받은 값 확인
>>> <class 'map> [1, 4, 9]
map함수와 람다 사용 예시
맵 함수 활용의 예시와 같은 표현이지만, 훨씬 간결하게 한줄로 표현이 가능하다.
# 람다와 맵 활용
print( list( map( lambda x: x*x , [1, 2, 3]) ) )
# 맵 객체이기 때문에 데이터 타입을 리스트로 변환하여 출력
>>> [1, 4, 9]
filter내장함수와 함께 람다 사용
filter함수란?
- 리스트를 함수의 매개변수로 전달 가능 (맵 함수와 동일)
- 함수에 적용한 값 중 참(True)인 값만을 지닌 filter 객체 리턴(반환)
# 필터를 활용 리스트를 매개변수로 전달
def func(x):
return x > 2
# 함수 호출시 2보다 큰 값 리턴
a = [1, 2, 3]
b = []
print( list( filter(func, a) ) )
>>> [3]
# filter 객체이기때문에 리스트로 변환
# 참의 값인 3만 리턴
filter함수와 람다 사용 예시
필터 함수 활용의 예시와 같은 표현이지만, 이 또한 훨씬 간결하게 한줄로 표현이 가능하다.
# 람다와 필터 활용
print( list (filter (lambda x: x>2, [1,2,3] ) ) )
# 필터 객체이기 때문에 데이터 타입을 리스트로 변환하여 출력
>>> [3]
map과 filter의 차이점?
- 비교식을 사용한 리턴 값은 Bool값 (True(=참), False(=거짓))
- 비교식에 맵을 사용할 경우 참/거짓 값 리턴
- 비교식에 필터를 사용할 경우 값이 참인 요소의 값 리턴
- 같은 비교식에 맵과 필터를 사용한 비교 예시
복잡한 객체 정렬시 람다 사용
students = [('영수', 'A', 15),
('철수', 'B', 16),
('영희', 'C', 10)]
print(sorted(students))
# 리스트 내의 각 튜플의 첫번째의 값 기준 정렬
>>> [('영수', 'A', 15), ('영희', 'C', 10), ('철수', 'B', 16)]
print(sorted(students, key=lambda x: x[1]))
# 리스트 내의 각 튜플의 두번째의 값 기준 정렬
>>> [('영수', 'A', 15), ('철수', 'B', 16), ('영희', 'C', 10)]
print(sorted(students, key=lambda x: x[2]))
# 리스트 내의 각 튜플의 세번째의 값 기준 정렬
>>> [('영희', 'C', 10), ('영수', 'A', 15), ('철수', 'B', 16)]
key?
- 키 값을 기준으로 정렬되고 기본은 오름차순
- sort, sorted 함수에서 사용되며 람다를 이용하여 사용
- 여러 요소가 있을 경우 튜플로 사용 가능
문자열 포맷팅과 함께 람다 사용
# 람다와 포맷 사용
print( (lambda x,y : '{} x {} = {}'.format(x,y, x*y)) (3,4) )
>>> 3 x 4 = 12
반복문과 사용시 리스트 컴프리헨션을 이용하여 표현 가능
# 리스트 컴프리헨션과 람다, 포맷, 이중for문 사용
print( [(lambda x,y: '{} x {} = {}'.format(x,y,x*y))(x,y) for x in range(2,10) for y in range(1,10)])
>>> ['2 x 1 = 2', '2 x 2 = 4' ........ '9 x 8 = 72', '9 x 9 = 81']
반응형