[Python] 파이썬 람다(Lambda) 함수 사용하기
- Language/Python
- 2020. 12. 26.
람다(Lambda) 함수는 익명으로 만드는 함수로, 별도의 def로 사용자 정의 함수를 만들지 않고 작업을 수행하는 익명 함수이다. 사실 함수라는 것이 "재사용"이 주된 목적인데 익명이라는 말이 뭔가 앞뒤가 안 맞아 보인다.
그러나 함수의 목적이 재사용만 있는 것은 아니다. 주된 목적이 재사용에 있지만, 코드의 간결함, 리팩토링등으로 봤을 때에도 함수를 사용할 수 있기 때문이다. 즉, 후자의 목적으로 만든 것이 람다함수라고 생각하면 될 것이다. 람다는 익명이기 때문에 한번 사용되면 heap 메모리에서 삭제되기 때문에 메로리 관리 차원에서는 유리한 면이 있다.
lambda의 장단점
코드의 간결화 : 람다를 사용하게 되면 복잡한 코드가 간결하게 바뀌게 되어 코드의 간결화로 이루어 지며 이는 곧 가독성이 올라가게 된다.
콜스택 추적 문제 : 디버깅 시 함수 콜스택 추적이 극도로 어렵다.
코드의 가독성 : 람다식은 가독성의 양날의 검을 모두 갖추고 있다. 간결화가 이루어지면서 가독성이 높아지는 것처럼 보이지만 남용하면 가독성이 극도로 힘들어진다.
람다식 코딩을 너무 남발하는 것은 유지보수에도 문제가 발생할 수 있고, 실제 문제가 발생했을 때 원인을 찾기가 극도로 힘들어질 수 있다. 이런류의 코딩을 지향하는 개발자들은 자신들의 버그를 제대로 못찾는 경우를 많이 봤고 다른 개발자가 유지보수를 꺼려하기도 하는데 적절한 선에서 활용하는 것이 좋아보인다.
lambda의 사용법과 예제
lambda 사용법
lambda 인자1, 인자2, ..., 인자n: 코드
lambda 예제
# a와 b의 인자를 합치는 함수
def add(a, b):
return a + b
print("1과 2의 합은 ", add(1, 2), "이다.")
# 1과 2의 합은 3 이다.
# lambda를 이용한 방법
print("1과 2의 합은 ", (lambda a,b: a+b)(1,2), "이다.")
# 1과 2의 합은 3 이다.
위는 일반적인 방식을 쓴 것이고, 아래는 람다를 활용한 방법이다. 크게 보면, 아래의 방법이 매우 간결하게 끝나기 때문에 람다의 장점으로 보이지만, 윗 방식이 이해하는데에는 좀 더 원활하다는 것을 알 수 있다.
이는 개행과 같은 부분으로 인해서 사람의 가독성이 늘어날 수 있는데 이와 비슷한 예로 삼항 연산자보다 if ~ else 방식으로 코딩된 것을 이해하기가 쉽다는 것과 유사하다. 다만 위에 만든 add라는 함수가 단 한번만 호출이 되는 방식이라면 람다를 사용하는 것이 훨씬 효율적일 것이다.
lambda를 여러번 활용하기
x = lambda a,b: a+b
print("1과 2의 합은 ", x(1,2), "이다.")
# 1과 2의 합은 3 이다.
print("3과 4의 합은 ", x(3,4), "이다.")
# 3과 4의 합은 7 이다.
람다를 위와 같이 변수에 넣어서 해당 구문 내에서는 여러번 활용할 수도 있다. 마치 변수가 함수가 되고, 변수명이 함수명처럼 바뀌는 효과를 가진다.
연관포스팅
2020/12/26 - [Language/Python] - [Python] 파이썬에서 함수(Function) 사용법, 메소드(Method)와 차이
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 문자열 분리(나누기), Split 함수 (0) | 2020.12.29 |
---|---|
[Python] 파이썬 리스트 문자열 합치기 Join 함수 (0) | 2020.12.28 |
[Python] 파이썬 함수(Function) 사용법, 메소드(Method)와 차이 (0) | 2020.12.26 |
[Python] 파이썬에서 딕셔너리(Dictionary) 사용법 (0) | 2020.12.26 |
[Python] 파이썬에서 튜플(Tuple) 다루기, 튜플 써야 할 때 (0) | 2020.12.23 |