Python Lambda Expression

Lambda Expression

Lambda Expression은 함수를 하나의 식(Expression)으로 표현한 inline function으로 단 한 줄로 파이썬에서 def로 정의된 함수와 같은 역할을 간단히 구현할 수 있으며 주로 함수의 인자로 많이 사용할 수 있다.

Syntax

사용 문법은 아래와 같으며 표현식의 결과값이 반환된다.

lambda arguments : expression

Simple Example

Single Argument

입력 변수 a에 10을 더한 값을 표현하는 함수는 아래와 같다.

def add_ten(a):
    return a + 10

x = add_ten(a)

이를 람다 표현식으로 아래처럼 표현할 수 있다.

x = lambda a : a + 10
print(x(5))

Multiple arguments

람다 표현식은 여러개의 arguments를 처리할 수 있다.

x = lambda a, b : a*b
print(x(5, 6))



——-

Power of Lambda Expression

Multiple usage

람다 표현식의 장점은 function 내부의 inline으로 표현하는 익명함수(anonymous function)일 것이다. 아래의 예제처럼 하나의 명세로 여러가지의 function을 정의할 수 있다.

def myfunc(n):
    return lambda a: a * n

my_double = myfunc(2)
my_triple = myfunc(3)

print(my_double(10))
print(my_triple(10))

Inline function as function arguments

List sorting key

List의 element들이 single data가 아닌 tuple, list같은 다른 data structure인 경우, 람다 표현식을 sort하는 key arguments로 사용할 수 있다.

Li = [(1, 11), (2, 8), (4, 7), (5, 5), (3, 8)]
print(sorted(Li))
# Simple : [(1, 11), (2, 8), (3, 8), (4, 7), (5, 5)]

print(sorted(Li, key = lambda a : -a[0]))
# Reversed : [(5, 5), (4, 7), (3, 8), (2, 8), (1, 11)]

print(sorted(Li, key = lambda a : a[0]))
# key is 1st : [(1, 11), (2, 8), (3, 8), (4, 7), (5, 5)]

print(sorted(Li, key = lambda a : a[1]))
# key is 2nd : [(5, 5), (4, 7), (2, 8), (3, 8), (1, 11)]

print(sorted(Li, key = lambda a : a[0] + a[1]))
# key is sum : [(2, 8), (5, 5), (4, 7), (3, 8), (1, 11)]

Map iterator

Map을 이용해 List를 생성시, iterator로 사용할 수 있다.

list(map(lambda x: x+10, [10, 20, 30]))
# [20, 30, 40]

Filter iterator

List에서 필요한 요소들만 반환할 수 있다.

li = [1, 2, 3, 4, 5, 6, 7, 8]
rslt = list(filter(lambda x : x > 4 and x < 7, li))
# [5, 6]