본문 바로가기
Python/Python 개념

파이썬 Lambda함수

by hyun-am 2020. 3. 29.

Lambda 함수

 

Lambda함수란

 

단일 문으로 표현되는 익명 함수입니다. 익명 함수란 이름이 없는 구현체만 존재하는 간단한 함수를 의미합니다. 자바스크립트에서 익명 함수와 arrow function과 비슷한 기능을 한다고 생각하면 됩니다.

또한 코드 상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 1회성으로 만들어서 쓸 때 사용합니다.

 

Lambda함수 예제

 

먼저 Lambda 함수 예제를 보여주기 위해 삼각형을 구하는 함수를 하나 만들겠습니다.

 

일반 함수로 구현시

def triangle_(x,y):
    result_ = x * y * (1/2)
    return result_
print(triangle_(5, 10))

## 출력 값
# 25.0

 

람다 함수로 구현시

triangle_ = lambda x,y : x*y*(1/2)
result_ = triangle_(5,10)
print(result_)

## 출력 값 
# 25.0

 

마찬가지로 문자열에서도 람다 함수를 사용할 수 있습니다. 예를들면 만약에 아래와 같은 리스트를 sort하면 a,b,c .... 문자 순으로 정렬 되는 것을 확인할 수 있습니다. 하지만 람다에 함수를 적용해서 출력하면 글자의 길이 순으로도 출력하는 함수를 만들 수 있습니다.

 

먼저 문자열 길이를 구하는 함수를 만들어 줍니다.

def str_len(s):
    return len(s)

 

다음은 문자들이 담긴 리스트를 만들겠습니다. 여기서 key를 이용해 함수를 넣어서 문자열을 길이의 순으로 표현하였습니다.

string_list = ['tiger','chicken','egg','cook','kim_min_su']
print(string_list)

string_list.sort()
print(string_list)

string_list.sort(key=str_len)
print(string_list)

## 출력 값 
# ['tiger', 'chicken', 'egg', 'cook', 'kim_min_su']
# ['chicken', 'cook', 'egg', 'kim_min_su', 'tiger']
# ['egg', 'cook', 'tiger', 'chicken', 'kim_min_su']

하지만 맨 위에 있는 str_len선언 없이 람다 함수로만 표현하면 더욱 간결하게 표현할 수 있습니다.

string_list.sort(key = lambda s:len(s))
print(string_list)

## 출력 값
# ['egg', 'cook', 'tiger', 'chicken', 'kim_min_su']

 

Lambda가 유용하게 사용되는 3가지 대표적 함수

 

먼저 Lambda에서 유용하게 사용되는 3가지 대표적인 함수가 있는데 filter, map, reduce가 있습니다. 예제는 아래에서 확인하겠습니다.

 

filter 예제

 

filter는 특정 조건을 만족하는 요소만 남기고 필터링 하는 함수 입니다.

예를 들면 홀수인 숫자를 구할때 원래는 홀수를 구하는 함수를 따로 만든 후 진행하는데 람다식과 filter함수를 같이 사용하면 더욱 쉽게 표현 할 수 있습니다.

 

num_list = list(range(11))
print(num_list)
print(list(filter(lambda s:s%2==1, num_list)))

## 출력 값
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# [1, 3, 5, 7, 9]

 

map 예제

 

map는 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환합니다.

먼저 정해진 리스트의 두배에 해당하는 리스트를 만드는 map 예제를 보겠습니다.

 

num_list = [1,2,3,4,5]
print(num_list)
print(list(map(lambda s:s*2, num_list)))

## 출력 값 
# [1, 2, 3, 4, 5]
# [2, 4, 6, 8, 10]

 

Reduce 예제

 

reduce는 차례대로 앞 2개의 원소를 가지고 연산합니다. 연산의 결과가 또 다음 연산의 입력으로 진행됩니다. 따라서 마지막 까지 진행되면 최종 출력은 한개의 값만 남게 됩니다. 또한 reduce를 사용하기위해 functools를 import해줍니다.

 

아래 예제는 재귀호출 없이 reduce를 이용하여 팩토리얼을 구현한 코드입니다.

import functools


print(functools.reduce(lambda x,y:x*y, range(1,7)))

## 출력 값
# 720

마찬가지로 1~10까지의 합도 다음과 같이 표현할 수 있습니다.

import functools

print(functools.reduce(lambda x,y:x+y, range(1,11)))

## 출력 값
# 55

 

'Python > Python 개념' 카테고리의 다른 글

파이썬 - list comprehension  (0) 2020.05.24
파이썬 - 모듈 Import  (1) 2020.03.30
파이썬 - 함수(심화)  (0) 2020.03.29
파이썬 함수 - 기초  (0) 2020.03.29
파이썬 반복분(While)  (1) 2020.03.29

댓글