2015년 5월 27일 수요일

파이썬의 익명 함수(lambda function)

 익명 함수(lambda function)란 말 그대로 이름이 없는 함수이며 파이썬에서는 lambda 라는 키워드로 익명 함수를 정의할 수 있다. 주로 비교적 간단한 기능의 함수가 컨테이너의 요소로 들어가는 경우 혹은 다른 함수의 인자로 함수를 넘겨줄 필요가 있을 때 사용된다.

익명 함수는 다음과 같이 생성된다.

lambda 인자1,인자2, … : 표현식

익명 함수는 보통 한 줄로 정의된다. return문도 없으며 단지 인자들과 반환값들의 관계식으로만 표현된다. 예를 들어 두 수의 합을 반환하는 익명 함수는 다음과 같다.

>>> add = lambda a, b : a+b
>>> add(1,2)
3

이 익명 함수는 다음과 같이 일반 함수를 정의하는 것과 동일하다.

>>> def add(a, b) :
…..      return a+b
>>> add(1,2)
3

그렇다면 일반 함수와 익명 함수와의 차이점은 무엇인가? 익명 함수의 기능은 일반 함수보다도 훨씬 제한적이고 익명 함수로 할 수 있는 것은 일반 함수로도 모두 할 수 있다. 그렇다면 왜 익명 함수를 사용할까?

때로는 굳이 번거롭게 일반 함수를 정의할 필요가 없는 간단한 기능만을 구현해도 되는 경우가 있다.  예를 들어서 입력 인수가 0보다 크면 True를 반환하는 함수를 생각해 보자.

>>> def pos(x):
…..    return x>0
>>> list(filter(pos, range(-5,6)))
[1,2,3,4,5]

이것을 익명 함수를 이용하면 다음과 같이 간단하게 처리할 수 있다.

>>> list( filter(lambda x:x>0, range(-5,6)) )
[1,2,3,4,5]

또는 다음과 같이 간단한 함수들을 리스트의 요소로 지정할 경우도 있을 것이다.

>>> fl = [lambda x,y:x+y, lambda x,y:x*y]
>>> fl[0](1,2)
3
>>> fl[1](3,4)
12

이와 같이 람다 함수의 용도는 보다 간결하게 원하는 기능을 수행할 수 있도록 하는 것이다.


댓글 없음:

댓글 쓰기