본문 바로가기
python

python - lambda 활용법과 단점

by 맑은안개 2020. 2. 14.

람다 함수란?

람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수 (Anonymous functions)를 지칭하는 용어이다.

람다 함수를 사용하면 정규 코드보다 더 간결하게 표현하여 가독성을 높일 수 있다.

하지만 람다 함수는 단점도 존재한다. 무분별한 사용은 오히려 가독성을 저하시키며

오류 발생시 TraceBack에서 유추할 수 없다. ( 아래 예제 참조 )

 

본 장에서 python 람다 함수를 사용하는 방법과 활용법에 대해 살펴본다.

 

python에서 람다표현식은 아래와 같다.

lambda arguments: expression

 

인자로 주어진 두개의 수를 더하는 함수를 기존방식으로 만들면 아래와 같다.

def sum(x, y):
    return x + y
    
sum(5, 6)
Out[1]: 11    

위 sum함수를 람다식으로 표현

sum = lambda x,y: x+y

sum(5, 6)
Out[1]: 11

위 람다 함수를 보면 x,y 는 함수 인자(parameters) 이고 , 로 인자를 계속해서 받을 수 있다.

x+y는 함수의 body 이다. 

 

대화형 콘솔에 한해 직전에 선언한 lambda 함수를 _ (underscore)를 사용하여 호출 할 수 있다. 

lambda x,y: x+y

_(2,4)
Out[1]: 6

 

즉시 실행 함수 표현(IIFE, Immediately Invoked Function Expression)

- Javascript와 같이 python lambda식 뒤에 ( parameters ) 를 주입하여 즉시 실행할 수 있다.

(lambda x,y: x+y)(2,4)
Out[1]: 6

 

lambda 함수의 단점, TraceBack 결과로 부터 어떤 함수에서 발생했는지 알 수 없다.

 - lambda는 이름이 없는 익명함수로 존재한다. 이름이 없으므로 오류가 발생한 경우 함수 추적이 불가하다.

def div(x, y):
    return x / y
    
div(2, 0)
Traceback (most recent call last):

  File "<ipython-input-35-d4f2e18433d9>", line 1, in <module>
    div(2, 0)

  File "<ipython-input-34-88b44443e5b0>", line 2, in div       # 함수 이름
    return x / y

ZeroDivisionError: division by zero

(lambda x, y: x / y)(2, 0)
Traceback (most recent call last):

  File "<ipython-input-33-74c5e19e3737>", line 1, in <module>
    (lambda x, y: x / y)(2, 0)

  File "<ipython-input-33-74c5e19e3737>", line 1, in <lambda>  # lambda 로만 식별 가능
    (lambda x, y: x / y)(2, 0)

ZeroDivisionError: division by zero

 

반응형