Python 기초

무명 함수(람다식)

무명 함수는 이름은 없고 몸체만 있는 함수입니다. 파이썬에서 무명 함수는 lambda 키워드로 만들어집니다.

무명 함수는 여러 개의 인수를 가질 수 있으나 반환값은 하나만 있어야 합니다. 무명 함수 안에서는 print()를 호출할 수 없습니다. 계산만 가능합니다.

또 자신만의 이름 공간을 가지고 있고 전역 변수를 참조할 수 없습니다.

무명 함수가 비록 한 줄짜리 함수이지만 이것은 C나 C++에 있는 인라인(inline) 함수와는 다릅니다.

 

lambda 인수1, 인수2 : 수식

위에서 인수는 함수의 인수, 수식은 함수의 몸체를 나타냅니다.

 

무명 함수를 이용하여 2개의 정수를 합하는 함수를 작성해보면 아래와 같습니다.

sum = lambda x, y : x + y

print("정수의 합 :", sum(10, 20))
print("정수의 합 :", sum(20, 20))

 

<실행 결과>

정수의 합 : 30
정수의 합 : 40

 

만약 위의 코드를 일반적인 함수를 이용하여 작성하였으면 다음과 같이 되었을 것입니다.

def get_sum(x, y):
	return x + y

print("정수의 합 :", get_sum(10, 20))
print("정수의 합 :", get_sum(20, 20))

 

위에서 확인할 수 있듯이, get_sum()과 sum()은 동일한 작업을 하며 동일한 방식으로 사용할 수 있습니다.

람다 함수에서는 return 키워드를 사용할 필요가 없습니다. 람다 함수에서는 항상 반환되는 수식만 써주면 됩니다.

함수를 필요로 하는 곳에 람다 함수를 놓을 수 있으며 람다 함수를 반드시 변수에 할당할 필요도 없습니다.

 

그렇다면 람다 함수는 어디에 사용되는 것일까요? 람다 함수는 코드 안에 함수를 포함하는 곳에서 어디든지 사용될 수 있습니다.

예를 들어 GUI 프로그램에서 이벤트를 처리하는 콜백 함수(callback handler)에서 많이 사용됩니다.

콜백 함수를 간단하게 람다 함수로 작성하여 포함시키는 것입니다. 또 람다 함수는 점프 테이블을 만드는 데도 사용할 수 있습니다.

# 아래의 리스트 안에 람다 함수가 들어가 있습니다.
L = [lambda x: x ** 2, lambda x: x ** 3, lambda x: x ** 4]

for f in L:
	print(f(3))

 

<실행 결과>

9
27
81

 

min = (lambda x, y: x if x < y else y)
print(min(100, 200))

 

<실행 결과>

100