본문 바로가기

파이썬

[Python3] 람다(lambda) 함수

lambda()

lambda 함수는 런타임에 생성해서 사용할 수 있는 일시적인 익명 함수입니다.

인공지능 프로그래밍에 많이 쓰이는 함수형 언어인 LISP 에서 물려받은 함수라고 합니다.

 

 

아래는 일반적인 함수 표현식입니다. -x 값을 리턴해주는 함수입니다.

>>> def func(x):
...     return -x
>>> func(1)
-1

 

이것은 람다 형식으로 아주아주 간단하게 표현이 가능합니다.

>>> (lambda x:-x)(1)
-1

 

정말 쉽죠? 또는 아래와 같이 사용할 수도 있습니다.

>>> func = lambda x:-x
>>> func(1)
-1

 

따로 귀찮게 함수를 정의하지 않고도 바로 원하는 함수를 만들어 사용할 수 있기 때문에 map, filter, reduce, sorted 함수와 함께 쓰일 수 있습니다!

 

map()

map 함수는 map(함수, 리스트) 로 구성되어있습니다.

리스트의 인자를 함수의 파라미터로 넣어 리턴된 값을 다시 새로운 리스트로 반환해 줍니다.

>>> list(map(lambda x:-x, range(5)))
[0, -1, -2, -3, -4]

range(5)로 [0,1,2,3,4]라는 리스트를 생성하였고 이를 lambda x:-x에 적용하면, 위와 같이 0, -1, -2, -3, -4 라는 리스트가 생성됩니다! 

 

filter()

filter 함수는 filter(함수, 리스트) 로 리스트의 인자들을 함수에 적용시켜서 결과가 참인 값들만 리스트로 반환합니다.

>>> list(filter(lambda x:x<2, range(5)))
[0, 1]

위의 경우 [0,1,2,3,4]중 2보다 작은 인자는 0, 1 이므로 이들이 리스트로 반환됩니다.

 

reduce()

reduce 함수를 사용할때는 from functools import reduce를 꼭 사용해야 합니다.

reduce 역시 reduce(함수, 순서형 자료)의 형태로 사용하는데, 순서형 자료를 함수에 적용한 값을 계속 누적시킵니다.

>>> from functools import reduce
>>> reduce(lambda x,y:x*y, range(1,5))
24

먼저 1과 2를 곱하고, 그 결과에 3을 곱하고 그 결과에 4를 곱해서 24라는 결과를 뱉습니다.

 

sorted()

>>> a = [(1,2), (2,1), (3,4), (5,3)]
>>> sorted(a, key=lambda x:x[1])
[(2, 1), (1, 2), (5, 3), (3, 4)]

a 리스트를 정렬할 때 key를 기준으로 정렬하는데, 이 key는 x[1]인 원소로 정하겠다는 뜻입니다.

x[1]의 값을 기준으로 잘 정렬된 것을 확인할 수 있습니다.