오도원입니다.

건강과 행복을 위하여

Development/Python

Python. lambda 함수

오도원공육사 2020. 5. 10. 19:10
반응형

파이썬에서 함수는 def를 이용해서 함수를 정의한다. 이번에는 람다 표현식으로 익명함수를 정의하는 방법에 대해서 알아보자.

 

1. 익명함수가 왜 필요한가?

파이썬의 함수는 객체로 쓰인다. 그 뜻은 메모리의 공간을 차지한다는 말이다. 

 

다음은 홀수인지 판별하는 함수이다.

def isOdd(n):
	return n % 2 == 1

print(isOdd)

함수를 정의하고 함수를 호출하는 것이 아니라 출력하면 다음과 같이 출력된다.

0x010D6028 주소를 차지한다는 것이다. 매우 간단한 함수이지만 메모리를 차지하게 된다. 그러나 이것을 익명함수로 정의하게 되면 해당 함수는 메모리 공간을 차지하지않는다. 

 

따라서 람다함수(익명함수)의 장점은 코드의 간결함과 메모리의 절약이라고 할 수 있다.

 

2. 람다 표현식

먼저 2를 더해서 반환하는 일반함수를 만들어 보겠다.

def plus_two(n):
	return n + 2

매개변수 n을 받아서 n + 2를 반환하는 간단한 함수이다.

 

그러면 이 함수를 람다 표현식으로 작성해보겠다. 람다 표현식은 lambda에 매개변수를 지정하고 콜론(:) 뒤에 반환값으로 사용할 식을 지정한다.

lambda x : x + 2

보면 함수와 같이 0x00000288AE75A940 주소에 할당된것이 아니냐는 의문이 들 수 있다. 그러나 이것은 해당 람다함수를 어디에 바인딩한 것이 아니기 때문에 바로 사라진다.

 

이런식으로 람다표현식는 이름이 없는 함수를 만들기때문에 익명함수라고 하는 것이다.

 

람다함수는 변수에 할당해서 사용할 수 도 있다.

plus_two = lambda x : x + 2
plus_two(7)

 

3. 람다 표현식 호출

(lambda x : x + 7)(3)

4. 람다 표현식 안에서는 변수 생성 불가

람다 표현식 안에서는 새로운 변수를 만들 수 없다. 따라서 반환값 부분에는 변수없이 식을 한 줄로 표현할 수 있어야 한다.

(lambda x : y = 99; x + y)(1)

다만, 람다 표현식 바깥에 있는 변수는 사용할 수 있습니다. 다음을 보면 람다표현식 바깥에서 생성된 변수 y를 사용해서 x와 더한 값을 반환하는 것입니다.

y = 7
(lambda x : x + y)(3)

 

5. 람다 표현식을 인수로 사용하기

이것이 바로 람다함수를 사용하는 가장 큰 이유이다. 람다표현식으로 함수를 간단하게 만들어서 함수를 인자로 받는 함수의 인자로 넘겨주기 위함이다. 여기서 map함수를 사용하는 예제를 살펴보겠다.

def plus_two(x):
	return x + 2

arr = list(map(plus_two, [10, 20, 30]))
print(arr)

이제 이것을 람다함수로 만들어보겠다.

arr = list(map(lambda x: x + 2, [10, 20, 30]))
print(arr)

코드가 훨씬 간결해진것을 알 수 있다. 이처럼 람다 표현식은 함수를 다른 함수의 인자로 넣을 때 매우 편하다.

반응형