2013년 7월 27일 토요일

파이썬 람다(lambda) 함수

lambda 함수는 무엇일까요.. 

람다 함수는 람다 대수학(lambda calculus)에서 유래된 이름입니다만,
대부분의 사람들은 lambda란 용어가 사실 익숙치가 않습니다.  간단하게
이해하기 쉬운용어로 이것을 바꾸면 익명함수라고합니다.

lambda 함수는 아래와 같은 형태를 지닙니다. 쉽게 생각하면 one line function 이라고 보면됩니다. 아래 expression이 실제 함수 부분이라고 보면 되고요,



즉, 이름이 없는 함수인데요, 그럼 . 이름이 없는 함수를 왜쓰느냐..
단순하게 생각해서는 그냥 일회용으로 쓰는 용도로 씁니다.

그냥 쓰고 버리는 형태로요,

그냥 함수를 쓰고 싶은데 이름을 안정해주고 그냥 inline으로 씁니다.

그러면, 가장 기본적으로 coding량이 줄어드는 효과가 있고,

또, 생각의 흐름을 방해하지 않게 됩니다.

사람의 생각이 물흐르듯이 흐르게 됩니다.

보통 A -> B -> C 이렇게 주욱가는경우에

중간에 B에서 함수를 호출하면,

c 같은 경우에는,
A -> B -> function k -> B -> C 이런식으로

중간에 사고의 흐름이 끊어지게 되는 형태가 나오는데요
이게 중간에 다른데를 읽고 다시오게 때문에 좀 읽기에 방해가 되는 경우가 있습니다,

그런 경우에 짧은 함수들은 그냥 lambda로 선언해서 생각을 방해하지 않고, 물흐르듯이 진행할수가 있습니다.





a = lambda x , y : x * y 
print a(3,4) 
>> 12

이런식의 결과를 얻게 됩니다.

마찬가지로 sorting 같은 경우에도 보통 key function을 정해주는데,

이것도 lambda 로 선언해서, 기본적으로 제공해주는 sorting algorithm이 돌아갈 수 있도록,
해줍니다.

제곱수가 가장 작은 순서대로 소팅을 하고 싶다.

a = [ -1, -8, 3, -4, 2, 5, -7]
a.sorted(key=lambda x : x*x,reverse=False) 
>> print a
[-1,2,3,-4,5,-7,8]

아마도 이렇게 되겠지요?

p.s. 지적해주신 부분 수정하였습니다.

댓글 2개: