람다식이란? lambda

정식 명칭은 익명 함수 (위키백과)로, 이름에서 알 수 있듯 ‘이름이 없는 함수’이다.
풀어서 이야기하자면, def와 같은 식별자가 없고, 일반적인 함수 정의 형태를 따르지 않는 함수식이다.
아래 예시를 참고해보자.

1
2
3
4
5
6
7
8
9
10
11
12
# 두 숫자를 더하는 함수를 정의하고,
# 함수를 통해 10과 20을 더한 값을 출력해보자. 

'(1) 람다함수를 사용하지 않았을 때'
def sum(a, b):
    return a + b
sum(10, 20)


'(2) 람다함수를 사용하였을 때'
(lambda x, y : x + y)(10, 20)

람다식의 특징

  • 이름을 가지고 선언되는 일반적인 함수와 달리, 일회성으로 쓰이고 폐기된다.
    메모리에 오르지 않기에 메모리를 절약할 수 있으나, 다른 말로 하면 재사용이 불가능하다.
  • 함수의 정의와 동시에 매개변수를 지정해 값을 출력하도록 사용이 가능하다.
  • 일반적인 함수보다 짧게 작성이 가능하다.

단, 변수 = lambda x: 식 과 같이 변수에 함수를 정의하는 경우 메모리에 올라가며, 이후에도 호출하여 사용이 가능하다.

람다식을 사용하는 경우

람다식은 아래와 같은 경우에 사용된다.

  • 일회성으로 쓰이는 이름을 지정할 필요가 없이 간단히 쓰는 함수를 정의할 때
  • 함수식 자체가 매개변수가 되는 경우
  • 특정 함수의 return값이 특정 함수여야 하는 경우

람다식 사용법

람다식의 다양한 사용법을 서술한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 일반적인 계산 함수에 사용
lambda x, y : x + y  # 두 인자를 더하는 함수
lambda x : x**2      # 제곱을 출력하는 함수


# dict를 정렬할 때
dict_sorted = sorted(vocab.items(), key = lambda x:x[1])


# 조건문과 함께 사용
(lambda x: print('합격') if x >= 70 else print('불합격'))(70)


# 조건문과 함께 사용 - 다른 표현법
func = lambda x: '합격' if x >= 70 else '불합격'
print(func(70))


# map 함수와 함께 사용
# 주어지는 매개변수가 sequence형일 경우, 순환하며 함수를 적용한다.
map(lambda 매개변수: , sequence형 자료)
map(lambda x, y: x + y, [1, 2, 3])
# 출력은 <map object at 0x000001EAE8C6EAF0> 와 같이 메모리에 올라간 object 형태가 된다.  


# reduce 함수와 함께 사용
# 주어지는 매개변수가 sequence형일 경우, 앞의 인자부터 함수식을 적용해간다.  
from functools import reduce
reduce(lambda x, y: x + y, [1, 2, 3])


# 이후 추가

람다식의 장단점

람다식은 좋다 나쁘다로 평가하는 것 보다는..
필요에 의해, 그리고 상황에 알맞게 사용했는지가 가장 중요할 것으로 보인다.

예를 들어 나중에 재사용을 하는 함수를 일회성으로 람다로 써버린다면,
결국 나중에 동일 함수를 다시 정의하는, 두 번 일을 하는 불상사가 있을 것이다.

하지만 일회성 함수이면서 코드를 단순화하는 데 도움을 준다거나 하는 데에는
좋은 역할을 할 것으로 보인다.

람다식의 사용은, 좋다 나쁘다보다는 작성자의 성향에 따른 것일 수도 있다.

생각해보기

람다식을 쓰면서 생각이 드는 게..
파이썬의 comprehension을 이용하는 것과 거의 비슷한 효과를 내는구나.. 라는 생각이 든다.
comprehension으로 for문과 if문을 혼합해 사용하면 같은 결과를 낼 수 있을 것 같다.
이후 람다식을 만나면, 어떤 이유로 람다식을 썼는지, 그리고 대체할 수 있는 작성법은 무엇이 있는지 유심히 지켜봐야겠다.

하지만, 기존 작성된 코드 중 람다식이 사용된 경우도 많을 테니
그 코드를 해석할 수 있는 능력을 갖추기 위해서라도 람다식에 익숙해져야겠다.

레퍼런스

https://en.wikipedia.org/wiki/Anonymous_function
https://en.wikipedia.org/wiki/Alonzo_Church
https://en.wikipedia.org/wiki/Entscheidungsproblem
https://wikidocs.net/22804
https://wikidocs.net/64
https://wpaud16.tistory.com/55