본문 바로가기

AI/Python

Lambda Function

람다(Lambda) 함수

파이썬에서는 람다함수를 통해 이름이 없는 함수를 만들 수 있습니다.

람다함수의 장점은 코드의 간결함 메모리의 절약이라고 생각할 수 있습니다.

 

def키워드를 통해서 함수를 생성하는 방법은 리터럴 표기법에 따른 함수 생성 방법입니다.

함수 또한 클래스를 통해 생성된 객체 인스턴스입니다.

def my_func():
      pass

 

 

위에 함수를 생성자를 통해 생성하는 방법을 간단하게 표현하면 다음과 같습니다.

my_func = function(code, globals[, name[, argdefs[, closure]]])

코드와 이름을 담아서 함수클래스를 통해서 객체를 생성하고, 그 객체를 함수이름과 동일한 변수에 담는과정을 def키워드가 대신해줍니다.

함수객체를 변수에 담은 시점에서, 함수객체는 메모리에 올라가서 변수를 통해 자신이 호출되기를 기다리게됩니다. 만약 다음과 같이 단한번만 사용될 함수라면 불필요한 메모리가 낭비됩니다.

낭비를 방지하게 위해서 del 키워드를 통해 변수와의 참조를 끊는것은 또다른 낭비, 개발자 시간 낭비입니다.

 

람다함수는 lambda라는 키워드로 생성할 수 있습니다.

람다함수는 결과부분된 부분을 return키워드 없이 자동으로 return해줍니다.

익명함수라는 이름처럼 lambda함수는 함수의 이름을 지정하지 않습니다.

 

 lambda x : x + 1

위와 같은 람다함수는 인자로 받은 숫자에 +1을 해주는 함수입니다. 람다 함수는 정의와 동시에 사용할 수 있습니다.

(lambda x : x+1)(3)
4

하지만 함수에 이름이 없고, 저장된 변수가 없기 때문에 다시 사용할 수는 없습니다.

물론 람다함수도 객체이기 때문에 정의와 동시에 변수에 담을 수는 있습니다.

func = lambda x : x + 1
func(4)
5

 

사용예시

map()

map(함수, 리스트)

이 함수는 함수와 리스트를 인자로 받습니다. 그리고, 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아줍니다.

>>> list(map(lambda x: x ** 2, range(5)))    
[0, 1, 4, 9, 16]

 

reduce()

reduce(함수, 시퀀스)

시퀀스(문자열, 리스트, 튜플)의 원소들을 누적적으로 함수에 적용시킵니다.

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

위의 예제는 먼저 0과 1을 더하고, 그 결과에 2를 더하고, 거기다가 3을 더하고, 또 4를 더한 값을 돌려줍니다. 한마디로 전부 다 더하라는 겁니다. 

>>> reduce(lambda x, y: y + x, 'abcde')
'edcba'

 

filter()

filter(함수, 리스트)

리스트에 들어있는 원소들을 함수에 적용시켜서 결과가 참인 값들로 새로운 리스트를 만들어줍니다. 

>>> list(filter(lambda x: x < 5, range(10))) 
[0, 1, 2, 3, 4]

 

>>> list(filter(lambda x: x % 2, range(10)))  
[1, 3, 5, 7, 9]

 

If문

double_or_zero=lambda num: num*2 if num>10 else 0

print(double_or_zero(15))
print(double_or_zero(5))

#30
#0

 

'AI > Python' 카테고리의 다른 글

[자료구조] Node  (0) 2022.06.14
Map함수  (0) 2022.06.10
함수(Function)  (0) 2022.05.07
Fundamentals  (0) 2022.04.06