관리 메뉴

Life goes slowly...

[Python] 파이썬의 lambda식 익명 함수 본문

프로그래밍/Python

[Python] 파이썬의 lambda식 익명 함수

빨강소 2020. 8. 8. 09:31
728x90
반응형

파이썬의 lambda 함수

파이썬의 람다 함수는 람다식, 람다 표현식, 익명 함수 등으로 알려져 있고 실제로 이름이 없이 정의되어 프로그래밍에 사용되는 함수를 말합니다.

파이썬의 람다 표현식은 쓰고 버리는 일시적인 함수이며, 함수가 생성된 내부에서만 사용됩니다. 간단한 기능을 일반적인 함수와 같이 정의하여 쓰는 것이 아니며 필요한 곳에서만 사용하고 버릴 수 있는 함수입니다. 람다 표현식은 익명의 함수이기 때문에 메모리를 절약하는 이점이 있는 함수입니다.

[ lambda 함수 문법 ]
lambda arg1, agr2, ... arg n: expression

 

파이썬의 lambda 함수 장단점
  • 프로그래밍 수행 코드 내용을 바로 확인이 가능한 장점이 있습니다.
  • 파이썬 프로그래밍 코드를 간결하게 사용할 수 있습니다.
  • 파이썬 프로그래밍 함수 블록이므로 코드가 길어질 경우 코드의 가독성이 떨어지는 단점이 있습니다.
  • 프로그래밍 실행시 에러가 발생할 경우 디버깅이 어려워 확인이 어려운 단점이 있습니다.

 

파이썬의 lambda 함수 사용이유

파이썬 프로그래밍 람다 표현식 함수는 익명 함수이기 때문에 사용하고 난후에 힙(heap) 메모리 영역에서 사라지기 때문에 단발성으로 사용하기에 편하고 좋습니다. Python에서는 객체지향 코드를 지향하기에 모든 것이 객체로 관리되고, 또한 각 객체는 레퍼런스 카운터를 갖게 되는데 해당 카운터가 어떠한 것도 참조를 하지 않게 되면 메모리를 환원하게 됩니다. 이러한 람다식 표현 함수역할을 하는 것이 가비지 컬렉터입니다.

 

파이썬 lambda 함수 유의사항

파이썬 프로그래밍 람다 표현식 안에서는 새 변수를 만들 수 없기 때문에 반환값 부분은 변수 없이 식 한 줄로 표현을 해야 하며 변수가 필요할 경우에는 def로 함수를 코드로 작성하여 표현해야만 합니다. 또한 람다를 변수에 할당하여 재사용도 가능합니다.

 

파이썬의 lambda 함수 표현식

1. 프로그래밍 lambda 함수에 조건부 사용하기

[ lambda 함수 조건부 문법 ]
lambda arg1, agr2, ... arg n: 식1 if 조건부 else 식2

조건부 표현식에서는 if, else를 사용할 때는 :(콜론)을 사용하지 않습니다. 특히 람다 표현식에서 if 문을 사용했다면 반드시 else를 사용해야 하며 if만 사용하게 된다면 문법 에러가 발생하므로 유의해야 합니다. 그리고 람다 표현식 안에서는 elif를 사용이 불가능하고 if를 연속으로 사용해야 합니다.

함수 내부에 많은 조건을 사용하게 되면 가독성이 떨어지게 되어  람다 표현식을 사용하기보다는 def 함수를 사용하는 것이 좋습니다.

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: str(x) if x == 1 else float(x) if x == 2 else x + 10, a))
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]

 

2. filte() 함수

파이썬 리스트의 원소 필터링하여 반환하는 filter() 함수입니다. filter()는 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져오며, filter에 지정한 함수의 반환값이 True 일 때만 해당 요소를 가져오게 됩니다.

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

 

3. map() 함수

파이썬 리스트 여러 개의 각 원소에 람다 함수를 적용할 경우에 사용되는 map() 함수입니다. map()은 반복 가능한 객체를 여러 개 넣을 수 있습니다.

변수 = map(함수, 리스트)
>>> a = [1,2,3,4,5]
>>> b = [2,4,6,8,10]
>>> list(map(lambda x, y:x*y, a,b))
[2,8,18,32,50]

 

4. reduce() 함수

파이썬 리스트의 원소에 누적으로 함수를 적용하는 reduce() 함수입니다.

reduce(함수, 순서형 자료)
>>> from functools import reduce
>>> reduce(lambda x,y: x+y, [1,2,3,4,5])
15
728x90
반응형
Comments