람다표현식(람다식, 람다 함수)는 익명의 함수를 일컫는다.
일반적으로 사용되는 def- 형식의 함수 선언 대신, 간단하게 한 줄 정도로 작성할 수 있다.
주로 고차함수에 인자(argument) 또는 리턴값으로 활용된다.
변수에 담아 써도 되고, 람다식 자체를 가져다 때려 박아도 된다.
# 덧셈 함수
def add(x, y):
return (x+y)
# 한 줄로 줄이면
def add(x, y): return (x+y)
한 줄로 줄이긴 했지만 가독성이 떨어진다.
람다 식으로 바꾸면...
print( (lambda x,y: x+y) (5, 10) )
>>> 15
읽기 쉬운 한 줄로 끝낼 수 있다.
주의사항: 람다 내부에서 새 변수 선언은 불가능하다.
그래서 람다식의 리턴값은 1줄의 식으로 표현할 수 있어야 한다.
대신, 람다식 밖에 있는 변수를 가져올 수는 있다.
y = 10
print( (lambda x: x+y) (5) )
>>> 15
단순히 생각해보면 그냥 미리 만들어 두고 호출하는게 더 쉽지 않나? 싶을 수도 있다.
(애초에 그게 함수를 사용하는 근본적인 이유이기도 하고)
하지만 람다 함수는 메모리 공간을 할당하지 않는다는 장점이 있다.
정확히는 표현식 내에서 메모리 공간을 사용 후, 다음 코드로 넘어가면 바로 힙 메모리를 반납한다.
그래서 메모리를 절약할 수 있다. 따봉.
스택, 힙 개념까지 넘어가면 너무 복잡해지니까 일단 여기까지만 이해하고 넘어가자.
map(f, iterable) 함수는 입력받은 자료형의 각 요소를 함수(f)로 실행한 결과를 묶어서 map iterator 객체로 출력한다.
# 인풋을 2배로 돌려주는 함수
def list_mul(x):
return x*2
result = list(map(multi_2, ([1,2,3])) # map object로 나오기 때문에 list로 변환
print(result)
>>> [2, 4, 6]
람다가 출동하면 어떨까?
result = list(map(lambda x: x*2, [1,2,3]))
print(result)
>>> [2, 4, 6]
훨씬 짧아졌다!
이외에도 filter(), reduce() 등 람다식과 궁합이 좋은 함수들이 있다.
pep8 Code Layout
https://pep8.org/#code-lay-out
Pythonic 한 코딩 스타일 가이드
https://python-guide-kr.readthedocs.io/ko/latest/writing/style.html
list와 array의 차이
https://blog.martinwork.co.kr/theory/2018/09/22/what-is-difference-between-list-and-array.html