@Lambda
-함수 이름없이 함수처럼 쓸 수 있는 익명 함수
-수학의 람다 대수에서 유래
-Python3부터는 권장하지는 않지만 여전히 많이 쓰임
(List Comprehension으로 대체 가능하지만 판다스 등에서 효율적으로 사용 가능하기 때문)

보통 함수에서 함수 선언 후 함수 이름 지정, 인자값 지정, 리턴 값 선언해주는 형태라면
람다 함수는 람다 선언 후 입력값, 반환값 선언해주는 형태
(익명 함수를 변수에 넣어주면 그 변수 자체가 하나의 함수가 되는 형태)
@Map 함수
-Squence 자료형(List, Tuple) 각 element에 동일한 function 적용
-코드 직관성이 떨어지기 때문에 Python3부터는 권장하지는 않지만 여전히 많이 쓰임

실습)
# 1
def f(x, y):
return x + y
print(f(1, 4))
# 2
f = lambda x, y: x + y
print(f(1, 4))
#3
f = lambda x: x ** 2
print(f(3))
#4
f = lambda x: x / 2
print(f(3))
#5
print((lambda x: x + 1)(5))
# From Python 3, you must add 'list' before the map function
a = [1,2,3,4,5]
print(list(map(lambda x: x+x, a))) # [2, 4, 6, 8, 10]
print((map(lambda x: x+x, a))) # <map object at 0x00000239631301C0>
Python3부터는 반드시 map 함수 앞에 list를 붙여줘야 함
(안 붙이면 위치값 출력됨)
a = [1, 2, 3, 4, 5]
fun = lambda x, y: x + y
print(list(map(fun, a, a)))
# [2, 4, 6, 8, 10]
zip 함수를 쓰지 않고도 한번에 두 개의 리스트 값도 연산 가능
a = [1, 2, 3, 4, 5]
print(list(map(
lambda x: x ** 2 if x % 2 == 0 else x,
a)))
# [1, 4, 3, 16, 5]
람다도 필터를 해줄 수 있는데, 조건 만족하지 않을 때 else값을 꼭 지정해줘야 함!
a = [1, 2, 3, 4, 5]
fun = lambda x: x ** 2
print(map(fun, a)) # <map object at 0x0000018B19E30340>
for i in map(fun, a):
print(i)
# 1
# 4
# 9
# 16
# 25
result = map(fun, a)
print(result) # <map object at 0x0000018271C00340>
print(next(result)) # 1
터레이터를 만든 후에 각각의 값들을 호출해서 쓸 수도 있음
@Reduce 함수
-map 함수와 달리 list에 똑같은 함수 적용해 통합
-하나하나 옆으로 가면서 적용됨
-일반적으로 map과 reduce는 같이 쓰임
-코드 직관성이 떨어지기 때문에 Python3부터는 권장하지는 않지만 여전히 많이 쓰임
실습)
from functools import reduce
print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])) # (((1+2)+3)+4)+5
# 15
# factorial
from functools import reduce
def factorial(n):
return reduce(
lambda x, y: x*y, range(1, n+1))
factorial(5)
# 120
팩토리얼의 경우 reduce 함수를 쓰면 더 효율적
'CS > Python' 카테고리의 다른 글
Data Structure - Collections (0) | 2021.01.13 |
---|---|
Asterisk (0) | 2021.01.11 |
Enumerate & Zip (0) | 2021.01.10 |
List Comprehension (0) | 2021.01.10 |
Split & Join (0) | 2021.01.10 |