이 페이지에는 람다(lambda) 표현식, 람다를 사용하는 이유, 람다를 사용하는 예제로 map() 함수, filter() 함수, sorted() 함수가 설명되어 있습니다.
이번 포스팅에 추가로 도움이 될만한 페이지를 소개합니다.
☞ [파이썬 기초] 리스트 컴프리헨션(Comprehension) 이해하기
☞ [파이썬 기초] python 리스트(List) 이해하기
파이썬 람다(lambda) 제대로 이해하기
파이썬 개발자들이 매개 변수로 함수를 전달하는 번거로움을 줄이기 위해 함수를 간단하게, 즉 함수 이름 없이 선언하기 위해서 도입한 개념이 람다(lambda) 함수입니다.
람다 함수는 다음과 같이 간단한 표현식으로 만들 수가 있습니다.
예를 들어, 제곱을 구하는 함수를 만드는 경우를 생각해봅시다.
아래와 같이 우리가 잘 알고 있는 def를 이용하여 square_number()라는 함수를 만들어 사용하는 것이 일반적입니다.
하지만 람다(lambda) 함수를 사용하면 lambda x: x * x처럼 함수의 이름이 필요 없으며 return 키워드를 따로 쓰지 않아도 함수처럼 선언하고 사용이 가능합니다.
람다 함수는 위의 예제처럼 하나의 매개 변수를 사용할 수도 있지만 여러 개의 매개 변수를 사용하는 것도 가능하며 매개 변수의 특정 조건만 선택하는 것도 가능합니다.
lambda x, y: x + y --> x와 y를 더하여 리턴
lambda x: x > 2 --> x가 2보다 크면 참(True) 리턴
람다는 함수를 매개변수로 전달하는 표준 함수인 map() 함수, filter() 함수 등과 같이 사용할 경우, 그 효과가 극대화됩니다.
map() 함수는 리스트(list)의 요소를 하나씩 꺼내어 함수에 넣고 리턴된 값으로 새로운 리스트를 만들어 주는 함수이고, filter() 함수는 리스트의 요소를 함수에 넣고 리턴 값이 참(True)인 것만 리스트로 만들어주는 합수입니다.
매개변수로 전달하는 함수를 def를 사용하여 선언한 함수를 사용하여도 되지만, 다음과 같이 람다를 이용하면 코드가 굉장히 간단해집니다.
예제로 리스트(list_in)의 요소를 제곱하여 새로운 리스트(list_out_1)를 만들고, 리스트(list_in)에서 짝수만 선택하여 다른 리스트(list_out_2)를 만들어 보겠습니다.
여기서, 새롭게 만든 list_out_1과 list_out_2를 바로 출력(print)하면 원하는 결과가 출력되지 않고 다음과 같이 출력될 것입니다.
이것은 map() 함수와 filter() 함수의 결과물이 제너레이터(Generator) 이기 때문에 이처럼 출력되는 것입니다.
파이썬 입문자 분들에게는 조금 어려운 부분일 수 있는데, 제너레이터는 내부의 데이터가 실제 메모리에 용량을 차지하는 것이 아니고 호출하기 전까지는 가상의 값만 가지고 있는 형태입니다. 따라서 list() 함수를 이용하여 강제로 리스트 자료형으로 변환하여 출력하였습니다.
추가로 람다를 자주 볼 수 있는 곳이 리스트를 정렬할 때 사용하는 sorted() 함수입니다.
sorted() 함수는 리스트를 정렬하여 새로운 리스트로 만드는 내장 함수입니다. sorted() 함수는 매개변수로 key 함수를 사용할 수 있는데, key 매개 변수의 값은 단일 인자를 취하고 정렬 목적으로 사용할 키를 반환하여야 합니다.
정렬의 기준이 되는 key에 람다 표현식을 이용할 수가 있습니다.
예를 들어, [과일 이름, 개수]를 요소로 가지고 있는 이차원 리스트를 과일 이름으로 정렬하여 봅시다.
만약 람다 표현식이 없다면 어떻게 구현할 수 있을까요?
이럴 경우 간편하게 사용할 수 있는 것이 바로 람다입니다.
아래 예제에서 x[0]은 과일 이름을 기준으로 정렬하기 위한 것이고, x[1]로 설정을 변경하면 과일 이름 대신 리스트의 두 번째 요소인 개수로 정렬됩니다.
지금까지 알고 있으면 쉽고 간단한 파이썬의 람다의 개념에 대해서 알아보았습니다.
'파이썬 기초' 카테고리의 다른 글
Git을 이용한 코드 버전 관리 (0) | 2020.09.13 |
---|---|
형상 관리 툴 비교 Git, SVN, CVS (0) | 2020.09.11 |
[파이썬 코딩] 예외 처리 제대로 이해하기 (0) | 2020.08.23 |
if __name__ == "__main__" 제대로 이해하기 (0) | 2020.08.22 |
[파이썬 기초] 리스트 컴프리헨션(list comprehension) 이해하기 (0) | 2020.08.20 |