파이썬 기초 공사 ing ... 😆
Lambda는 함수 이름 없이, 함수처럼 쓸 수 있는 익명 함수입니다.
파이썬의 경우, 파이썬에 있는 내장 함수의 종류가 굉장히 많죠!
하지만 본인만의 함수를 만들어주고 싶을 때 def
를 사용해 함수를 정의해줘야 했습니다.
하지만 lambda를 사용할 경우 익명의 함수를 빠르게 사용이 가능합니다.
수학의 람다 대수에서 유래했다는데 관심 없습니다...
코드로 살펴 봅시다~
def f(x,y):
return x+y
print(f(1,4))
Out:
5
f(x,y) 함수는 x+y의 값을 return 해줍니다. 그래서 매개변수 1, 4가 들어갔을 경우 5가 출력됩니다.
f = lambda x, y: x+y
print(f(1,4))
Out:
5
위의 코드와 동일한 함수를 lambda를 이용해 만들었습니다.
lambda x:
이렇게 해준 다음 보통 뒤에 식을 이용하여 만드는 것 같습니다.
Sequence 자료형 각 element에 동일한 function을 적용한다.
Sequence 자료형이란 각 객체에 순서를 갖고 있는 자료 구조를 의미한다. 예를 들어, 리스트, 튜플, 문자열 등이 있다.
ex = [1,2,3,4,5]
f = lambda x: x ** 2
print(list(map(f, ex)))
f = lambda x, y : x + y
print(list(map(f, ex, ex)))
Out:
[1, 4, 9, 16, 25][2, 4, 6, 8, 10]
ex 리스트에 거듭제곱을 한 값과, ex 리스트와 ex 리스트를 각각 합한 값이 출력되었다.
map에는
map(function_name, list_data)
의 형식으로 들어갈 수 있다.
그래서 lambda로 만들어준 익명의 함수 f를 넣고 뒤에 리스트 ex를 적용시켰을 때, 함수 f에 맞게 계산된 값이 출력되는 것을 확인할 수 있다.
두 개 이상의 list에도 적용 가능하다.
if filter도 사용 가능하다.
ex = [1,2,3,4,5]
f = lambda x, y : x + y
print(list(map(f, ex, ex)))
print(list(
map(
lambda x: x ** 2 if x % 2 == 0
else x,
ex
)
)
)
Out:
[2, 4, 6, 8, 10]
[1, 4, 3, 16, 5]
일부러 코드를 해석하기 편하게 enter를 넣어서 코드를 작성한 것 같다.
list
, map
이 있고 그 안에
lambda x: ...
함수가 있고 if
filtering이 되어 있고 조건을 만족하지 않을 경우(else) x를 그대로 반환하라고 적어주었다.
lambda의 경우 filter를 적용할 때, 조건을 만족하지 않을 때의 else도 꼭 넣어줘야 한다고 한다.
각각 sequence의 값이 어떻게 반환되는지 보여주어야 한다.
map function과 달리 list에 똑같은 함수를 적용해서 통합합니다.
from functools import reduce
print(reduce(lambda x, y: x+y, [1,2,3,4,5]))
Out:
15
파이썬의 내장 모듈인 functools
에서 reduce()
란 함수를 이용한다.
reduce
의 기본 구조는 reduce(집계 함수, 순회 가능한 데이터[, 초기값])
위처럼 생겼고,
초기값을 기준으로 데이터를 돌며 집계 함수를 계속해서 적용하여 데이터를 누적 시키는 방식입니다.
그래서 집계 함수 자리에 lambda 함수인 x+y
를 적용시켜 주었고,
초기값인 1부터 시작하여 계속 누적하여 합을 더합니다.
1+2+3+4+5
는 15
가 됩니다.
Lambda
, map
, reduce
를 통해 간단하게 다양한 기능을 제공하는 코드들을 살펴보았다.
근데 python3에서는 직관성이 떨어진다는 이유로 lambda와 reduce는 사용을 권장하지 않는다고 한다!
무료 강의입니다! 강추!