파이썬에서 익명 함수(anonymous function)는 일반 함수처럼 def 키워드로 이름을 붙여 선언하는 대신, lambda 키워드를 사용해 간결하게 생성하는 작은 함수를 의미합니다. 이름 없이 한 줄로 정의되기 때문에 '람다 함수'라고도 불립니다.
람다 함수의 주요 특징
- 람다 형식은 임의 개수의 인자를 받을 수 있지만, 반환값은 반드시 하나의 표현식(expression) 형태여야 합니다. 따라서 명령문(statement)이나 여러 개의 표현식을 포함할 수 없습니다.
- 람다는 표현식만 허용하기 때문에
print호출을 직접 포함할 수 없습니다. - 람다 함수는 자신만의 지역 네임스페이스(local namespace)를 가지며, 매개변수 목록에 있는 변수와 전역(global) 네임스페이스의 변수 외에는 접근할 수 없습니다.
- 람다가 함수의 한 줄 버전처럼 보일 수 있지만, C나 C++의 인라인 문과는 전혀 다릅니다. C/C++의 인라인은 성능 향상을 위해 함수 호출 시 스택 할당을 생략하는 기법이지만, 파이썬의 람다는 이런 최적화와는 아무런 관련이 없습니다.
람다 함수 문법
람다 함수의 문법은 단 하나의 문장으로 구성됩니다.
lambda [인자1 [,인자2, ..., 인자n]] : 표현식
콜론(:) 앞에는 입력받을 매개변수를 나열하고, 콜론 뒤에는 결과로 반환될 단일 표현식을 작성합니다. 별도의 return 문이 필요하지 않으며, 표현식의 계산 결과가 자동으로 반환됩니다.
람다 함수 예제
다음 예제는 람다 형식의 함수가 어떻게 동작하는지 보여줍니다.
#!/usr/bin/python3
# 람다로 두 수의 합을 구하는 함수 정의
sum = lambda arg1, arg2: arg1 + arg2
# sum을 일반 함수처럼 호출
print("Value of total :", sum(10, 20))
print("Value of total :", sum(20, 20))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value of total : 30
Value of total : 40
람다 함수의 실전 활용
람다는 단독으로 사용하기보다 map(), filter(), sorted() 같은 고차 함수와 함께 사용할 때 진가를 발휘합니다.
# sorted()의 key 인자로 람다 활용
points = [(1, 5), (3, 2), (2, 8)]
sorted_points = sorted(points, key=lambda x: x[1])
print(sorted_points) # [(3, 2), (1, 5), (2, 8)]
# map()과 함께 사용
numbers = [1, 2, 3, 4]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # [2, 4, 6, 8]
간단한 연산이나 일회성 로직이 필요한 경우 람다를 사용하면 코드를 더욱 간결하고 가독성 있게 유지할 수 있습니다. 다만 로직이 복잡해지거나 재사용이 필요하다면 일반적인 def 함수로 정의하는 것이 바람직합니다.