본문 바로가기
컴퓨터공학기초 개념/알고리즘 개념

람다(lambda)란 무엇인가?

by devraphy 2021. 4. 16.

- 알고리즘 공부를 하다보면 람다(lambda)라는 식을 자주 접하게 된다.

- 도대체 람다가 무엇인지 같이 알아보자. 

 

1. 개념

  • 람다는 어떤 함수의 매개변수로 다른 함수를 넣고 싶을 때 사용한다. 
  • 람다는 anonymous function 이라는 명칭을 갖고 있다. 선언 없이 또는 이름 없이 사용할 수 있는 함수다.
  • 람다의 특징은 일회성이다.  함수의 선언부가 없으므로, 한번 사용하면 그걸로 끝이다. 
  • 람다의 핵심은 지연실행 또는 지연연산이다. 이는 필요할 때만 호출하여 사용하는 방식으로 메모리상의 불필요한 연산을 줄인다는 것을 의미한다.(장점)

 


2. 사용법

- 예시코드를 보면서 사용법을 익혀보자.

print((lambda x, y, z : x + y + z)(1, 1, 1))

 

 

a) anonymous function이라고 부르는 이유 

- 함수를 정의해서 사용하는 경우, 다음과 같은 코드가 필요하다. 

def add(x, y):
	return x + y
    
add(5, 5)

 

 

- 하지만 람다를 사용하면, 다음과 같이 작성할 수 있다. 

- 즉, 정의 없이 사용할 수 있기 때문에 anonymous 라는 수식어가 붙는 것이다. 

add = lambda x,y : x+y
print(add(5,5))

 


3. key = lambda x:x[0] 

- 파이썬으로 알고리즘 문제 풀이를 공부해봤다면, 위의 람다식을 자주 보았을 것이다.

- Key는 무엇인지, 왜 저렇게 람다를 사용하는지에 대해서 같이 배워보자.

 

a) Sorted() 함수

- key는  sorted 함수에서 사용되는 속성 값이다.

- 예제를 통해서 기본적인 sorted() 함수의 사용법을 알아보자. 

fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
sorted1 = sorted(fruits)
sorted2 = sorted(fruits.items())

print(sorted1)
print(sorted2)

 

  • 딕셔너리는 Key와 Value로 구분되어 한 쌍을 이루는 값이다. 
  • sorted()에서 딕셔너리를 매개변수로 사용하면 Key값만 정렬하여 출력한다. 
  • sorted()에서 딕셔너리.items()를 매개변수로 사용하면, key와 value를 한 쌍으로 정렬하여 출력한다. 

 

- 위의 결과를 보면, 딕셔너리의 요소들이 Key값을 기준으로 정렬된 것을 볼 수 있다. 즉, Key값이 정렬 기준인 것이다.

- 그렇다면 key값을 바꾸면, 정렬 기준도 바뀌지 않을까?

- 그래서 쓰이는 것이 key 라는 속성 값이다.

 

 

b) key값을 변경하여 정렬 기준을 바꿔보자. 

- 반드시 알아야 할 것은, sorted() 함수에서 key 속성에는 반드시 함수가 들어가야 한다는 것이다. 

- 더불어, 딕셔너리의 key 값은 x[0]에 위치하고 value 값은 x[1]에 위치한다는 것을 숙지해놓자. 

fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}

def f1(x):
   return x[0]
   
def f2(x):
   return x[1]
   
sorted1 = sorted(fruits.items(), key=f1)
sorted2 = sorted(fruits.items(), key=f2)

print(sorted1)
print(sorted2)

 

  • key값을 f1으로 사용한 sorted1은 key값(= 문자열)을 기준으로 오름차순 정렬된 것을 확인할 수 있다. 
  • key값을 f2로 사용한 sorted2는 value값(= 숫자)을 기준으로 오름차순  정렬된 것을 확인할 수 있다. 

 

- sorted() 함수는 기본(default)이 오름차순 정렬기에 reverse = True 라는 속성 값을 사용하면 내림차순 정렬을 할 수 있다. 

fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}

def f1(x):
   return x[0]
   
def f2(x):
   return x[1]
   
sorted1 = sorted(fruits.items(), key=f1, reverse = True)
sorted2 = sorted(fruits.items(), key=f2, reverse = True)

print(sorted1)
print(sorted2)

 

 

c) key에 들어가는 함수를 람다식으로 변경해보자.

- 앞서 언급했듯이, key 속성 값에는 반드시 함수가 들어가야 한다.

- 일회성으로(= 재사용 되지 않는) 사용되는 함수는 선언하기 보다는 람다식으로 바꾸는 것이 코드의 효율을 높인다.

- 앞선 예시에서는 f1(), f2() 함수를 직접 정의하고 사용했는데, 이 부분을 람다식으로 바꿔보자.

 

fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
   
sorted1 = sorted(fruits.items(), key= lambda x: x[0])
sorted2 = sorted(fruits.items(), key= lambda x: x[1])

print(sorted1)
print(sorted2)

 

 

- 람다는 전혀 어려운 것이 아니다. 

- 자주 사용해서 잘 익혀놓자. 

댓글