익명함수 (lambda)

  파이썬에서 "lambda" 는 런타임에 생성해서 사용할 수 있는 익명 함수 입니다. 이것은 함수형 프로그래밍 언어에서 lambda와 정확히 똑같은 것은 아니지만,  파이썬에 잘 통합되어 있으며 filter(), map(), reduce()와  같은 전형적인 기능 개념과 함께 사용되는 매우 강력한 개념이다.

  lambda는 쓰고 버리는 일시적인 함수 입니다. 함수가 생성된 곳에서만 필요합니다. 즉, 간단한 기능을 일반적인 함수와 같이 정의해두고 쓰는 것이 아니고 필요한 곳에서 즉시 사용하고 버릴 수 있습니다.

람다 사용예제
>>> def inc(n): 
	return lambda x: x + n 
>>> f = inc(2) 
>>> g = inc(4) 
>>> print(f(12)) 14 
>>> print(g(12)) 16 
>>> print(inc(2)(12)) 14 
>>>

  위의 코드는 inc 함수로 lambda 함수를 즉석에서 생성하고 반환 하는 함수를 정의 합니다. 리턴 된 함수는 인수를 작성시 지정된 값만큼 증가시킵니다.

 

 

map() 함수

람다 함수의 장점은 map() 함수와 함께 사용될 때 볼 수 있습니다.  map() 은 두 개의 인수를 가지는 함수입니다.

r = map(function, iterable, ...)

  첫 번째 인자 function 는 함수의 이름 입니다. 두 번째 인자 iterable은 한번에 하나의 멤버를 반환할 수 있는 객체 입니다.(list, str, tuple) map() 함수는 function을 iterable의 모든 요소에 대해 적용합니다. 그리고 function에 의해 변경된  iterator를 반환합니다.

>>> a = [1,2,3,4] 
>>> b = [17,12,11,10] 
>>> list(map(lambda x, y:x+y, a,b)) 
	[18, 14, 14, 14]

 

 

filter() 함수

  filter() 함수도 두 개의 인자를 가집니다.

  r = filter(function, iterable)

  filter에 인자로 사용되는 function은 처리되는 각각의 요소에 대해 Boolean 값을 반환합니다. True를 반환하면 그 요소는 남게 되고, False 를 반환하면 그 요소는 제거 됩니다.

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] 
>>> list( filter(lambda x: x % 3 == 0, foo) ) 
	[18, 9, 24, 12, 27]

 

reduce() 함수

  reduce() 함수를 두 개의 필수 인자와 하나의 옵션 인자를 가지는데, function 을 사용해서 iterable을 하나의 값으로 줄입니다. initializer 는 주어지면 첫 번째 인자로 추가 된다고 생각하면 됩니다.

  functools.reduce(function, iterable[, initializer])

  예를 들어 reduce(function, [1,2,3,4,5]) 에서 list 는 [function(1,2),3,4,5] 로 하나의 요소가 줄고, 요소가 하나가 남을 때까지 reduce(function, [function(1,2),3,4,5]) 를 반복합니다.

>>> from functools import reduce 
>>> reduce(lambda x,y: x+y, [1,2,3,4,5]) 
	15

 

+ Recent posts