반응형
람다(Lambda)란?

원래 파이썬에서는 함수를 만들 때 def를 사용하여 반복되는 작업을 정의된 함수로 처리한다.

이 때 lambda는 파이썬에서 함수를 더 간결하게 표현하기 위해 만들어진 함수이다.

일반함수→ def(매개변수,매개변수):
                    프로그램
                    return 반환값
lambda→ lambda 매개변수: 표현식(return반환값)

예를 들어 두 인수를 더하는 값을 반환값으로 가지는 함수를 각각 만들어 본다고 하자.

#def를 이용하여 두 인수를 더하는 함수 만들기
def add(num1,num2):
    return num1 + num2
add(3,4)

결괏값: 7

#lambda를 이용하여 두 인수를 더하는 함수 만들기
add = lambda num1, num2: num1 + num2
add(2,4)

결괏값: 6

이렇게 lambda는 def를 쓸 때보다 간단하게 함수를 만들 수 있다.

 

map

map은 여러 개의 데이터를 한 번에 return 반환을 할 때 사용하면 편리하다.

때문에 리스트형이나 튜플등의 자료구조에서 사용하기 용이하다.

map을 이용하여 7,8,9에 각각 7을 곱하여 출력하는 lambda를 만들어 보도록 하자.

#map을 이용하여 lambda 만들기
multiple_nums = [7,8,9]

multiple_result = list(map(lambda x: x*7,multiple_nums))
multiple_result

결괏값: [49,56,63]

 

filter

필터는 말 그대로 특정 조건을 가지고  필터를 한 결과를 보여준다.

예제로 list 값(1~30) 중에서 3의 배수만 결과를 보여주는 lambda를 만들어 보자.

#list comprehension을 이용해 1~30을 가지는 list 만들기
list1 = [i+1 for i in range(30)] 

#filter를 사용하여 list1에서 3의 배수만 추출하기
list2 = list(filter(lambda i: i%3 == 0,list1))
list2

결괏값: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

 

reduce

reduce는 계산기의 memory(M) 기능과 같이 함수를 만들어 앞의 결과를 누적한 뒤 결과값을 반환하는 함수이다.

예를 들어 입력된 수를 다 더해주는 add함수를 만든다고 해 보자. def와 lambda를 이용한 2가지 방법을 사용하겠다.

#def로 add만들기
def add(*a):
    total = 0 #더한 결과값을 저장하는 변수
    for i in a:
        total +=i #total = total + i와 같음
    return total
add(1,2,3,4)

결괏값: 10

#reduce로 add 계산하기
from functools import reduce #python3부터는 reduce를 import해야 사용이 가능
a = [1,2,3,4]
add = reduce(lambda x,y: x+y, a)
add

결괏값: 10

위와같이 reduce를 사용하면  for문 생략하여 코딩을 할 수 있다.

 

참고자료

      TIL.28 람다 표현식(lambda) 사용하기

 

예제파일

lambda_example.ipynb
0.00MB


 

마무리

오늘은 lambda를 사용하여 함수를 간결하게 만드는 방법을 배웠다.

추후 코딩시에 유용하게 사용하길 바라며 ...

질문은 언제나 환영입니다. :)

반응형

+ Recent posts