파이썬은 람다 함수 혹은 익명 함수라고 하는 문법을 지원합니다.
아래 코드는 숫자를 넣으면 넣은 수에 1
을 더한 값을 리턴하는 람다 함수입니다.
lambda n: n + 1
위 람다 함수는 아래 함수 inc
와 완전히 기능이 같습니다.
def inc(n):
return n + 1
한 줄 이내의 간단한 로직이라면 아래와 같이 람다 함수에 이름을 줘서 사용하는 것이 간편할 수 있습니다.
inc = lambda n: n + 1
inc(1) # 2
map
이나 filter
같이 함수를 인자로 받는 함수를 사용할 때 람다 함수가 특히 유용할 수 있습니다.
페이스북 그룹 파이썬 코딩 관리자 Yong Joon Moon 님께서 아래와 같은 요청을 해주셨습니다.
함수와 람다 함수 클래스가 다릅니다. 이 두 개의 차이점도 설명해 주세요
제가 몰랐던 내용이라 검색을 해봤습니다.
이 링크에 따르면 여러가지 차이점이 있습니다만 가장 눈에 띄었던 것은 에러 발생 시 함수 이름이 표시되지 않아 디버깅이 어려울 수 있다는 점입니다.
다른 것은 잘 모르겠습니다.
아래와 같은 말씀도 하셨습니다.
함수가 1급 객체인데 그 이유도 추가요
1급 객체, Higer Order Function 등 여러 용어가 있습니다만 중요한 것은 아래와 같다고 생각합니다.
함수를 값처럼 인자로 넣거나 함수를 리턴할 수 있다.
파이썬에서는 함수도 객체이기 때문에 함수를 값처럼 함수의 인자로 넣거나 함수 자체를 리턴할 수 있습니다.
따라서 map
이나 filter
, sorted
같은 함수에 함수를 인자로 넣을 수 있고
함수를 리턴할 수 있다는 점을 이용해서 데코레이터 같은 것을 할 수도 있습니다.
이 때 인자로 넣을 모든 함수를 기본 함수로 선언해서 사용할 수도 있지만
비교적 간단하고 호출 빈도가 적을 것 같은 함수는 굳이 기본 함수로 선언하기보다는
람다를 사용하는 것이 좋을 수도 있습니다.