[코딩테스트: Python] 함수: 람다(lambda)

IToriginal·2023년 3월 16일
0
post-thumbnail

Python으로 코딩테스트를 준비하면서 코딩테스트의 삐약이가 다른 사람의 코드를 참고할 때를 보면, lambda를 사용해서 문제를 푼 풀이들이 많이 보일 것이다. 그리고 댓글에는 "아.. lambda..." 이런식의 댓글들을 많이 볼 수 있었다. 하지만, lambda가 무엇인지 모르면 나처럼 lambda 식을 봐도 공감할 수 없을 것이다.

👨🏻‍💻 lambda ??

우선 Python의 lambda 는 익명 함수(anonymous function)을 만들때 사용되는 키워드이다.
여기서 익명 함수는 한글 그대로 이름이 없는 함수를 의미한다.
lambda 함수는 def 키워드를 사용하여 함수를 정의하는 것 보다 간결하게 코드를 작성할 수 있고, 한 줄로 함수를 작성할 수 있다.
lambda 함수는 보통 다른 함수 내에서 사용이 되는데, 함수 내에서 lambda 함수를 정의하면 해당 함수에서만 사용 가능한 지역 함수(local function)가 되어, 코드의 가독성과 유지 보수성을 높일 수 있다.

원래 함수는 복잡한 명령들을 편하게 사용할 수 있도록 모아두는 역할인데, def를 사용해 다른 함수를 만들고, 호출하는 것을 반복하는 불필요한 동작을 하지 않기 위해 만들어진 것이 lambda 함수이다.

🧐 lambda 선언 방법

lambda arguments: expression

lambda 함수의 기본 구문이다. 위의 구문에서 arguments는 함수에 전달되는 인자들의 리스트를 의미하며, expression은 함수의 실행 결과를 반환하는 식(expression)이다.

예를 들어, 두 개의 인자를 받아 더하는 lambda 함수는 아래와 같다.

lambda x,y: x + y

이 함수는 x 와 y 라는 두 개의 인자를 받아 덧셈 연산을 수행한 뒤에 결과 값을 반환한다.

🧐 lambda 함수와 일반 함수의 비교

lambda 함수는 복잡한 명령들을 편하게 사용하고 불필효한 동작을 반복하지 않기 위해 가볍게? 만든 함수 이기 때문에 코드를 보면 매우 간단하게 나타내어 진다.

예를 들어, lambda 를 사용하지 않고 짝수를 판별하는 함수를 만든다고 하면, 아래의 코드와 같을 것이다.

def unuse_lambda(x):
	return x % 2 == 0

하지만 이것을 lambda 로 표현하게 된다면, 아래와 같이 작성될 것이다.

use_lambda = lambda x: x % 2 == 0

👨🏻‍💻 lambda, map() & filter()

lambda 함수는 함수형 프로그래밍에서 유용하게 사용됩니다. 예를 들어, map() 이나 filter() 함수와 함께 사용하여 리스트나 딕셔너리 등의 자료형을 쉽게 처리할 수 있습니다. 또한, lambda 는 콜백 함수(callback function)로도 자주 사용된다.

🧐 map()

map(함수, 리스트 or 튜플)
이 함수는 함수와 리스트를 인자로 받는다. 그리고, 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음에 그 결과를 새로운 리스트에 담아준다.

#일반 함수
def plus_ex(x):
	return x + 2
result1 = list(map(plus_ex, [1, 2, 3, 4, 5]))
print(result1) #Output: [3, 4, 5, 6, 7]

#람다 함수
result2 = list(map(lambda x: x + 2, [1, 2, 3, 4, 5])) 
print(result2) #Output: [3, 4, 5, 6, 7]

🧐 filter()

filter(함수, 리스트 or 튜플)
filter 함수는 map 함수와 비슷하게 리스트나 튜플을 두번째 인자로 받아서 첫 번째 인자로 함수를 받는다.
첫 번째 인자에는 두 번째 인자로 들어온 리스트나 튜플을 하나씩 받아 필터링할 함수를 넣는데, 두 번째 인자에는 리스트나 튜플을 넣는다.

예로, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 까지의 리스트가 있을 때 짝수들만 filter 함수를 이용해서 리스트를 다시 만든다면, 아래와 같이 lambda를 사용할 수 있다.

#일반 함수
def even_ex(x):
	return x % 2 == 0
result1 = list(filter(even_ex, range(10))) #[0 ~ 9]
print(result1) #Output: [0, 2, 4, 6, 8]

#람다 함수
result2 = list(filter(lambda x: x % 2 == 0, range(10))) 
print(result2) #Output: [0, 2, 4, 6, 8]

람다에 대해서 간단하게 알아 보았는데 코딩테스트에서 문제를 풀 때 적절히 사용할 수 있는 연습이 필요해 보인다.


🔗 Reference

https://wikidocs.net/64
https://blockdmask.tistory.com/520

profile
👾ISTP의 개발자 도전기🧐

0개의 댓글