Python lambda 함수에 대해 살펴보겠습니다
lambda 함수를 통해 이름이 없는 함수를 일시적으로 만들 수 있습니다.
간단하고 반복적이지 않은 기능을 일반적인 함수로 만들지 않고
필요한 곳에서 즉시 선언과 동시에 사용하고 버릴 수 있습니다.
lambda의 가장 큰 장점은 코드의 간결함 및 메모리 절약입니다.
한 번밖에 쓰지 않는 함수를 def로 선언 시 함수 객체가 변수에 할당되고 메모리에 올라 호출을 기다립니다.
반면 lambda는 선언과 동시에 사용 후 버려짐으로 메모리에 올라가지 않습니다. ( 변수에 할당했을 때는 예외 )
조금 어렵게 말했지만 간단하게 말하면 한 번만 사용할 간단한 함수는 lambda로 만들어라입니다.
lambda는 아래와 같이 사용합니다.
lambda parameter_list : expression ( parameter_list : 매개변수, expression : 함수의 내용 )
>>> def sum(a, b):
return a + b
>>> sum(10, 20)
30
>>> (lambda a, b: a + b)(10,20)
30
lambda는 무조건 선언과 동시에 바로 사용해야 하는 것은 아닙니다.
변수에 담아둘 수 있습니다.
>>> sumFunc = lambda a, b : a + b
>>> sumFunc(1,3)
4
하지만 위처럼 변수에 담아 사용할 경우엔 일반적으로 def를 사용해 함수를 선언하여 쓰지
본문 상단에 장점에 의거하여 lambda를 쓸 이유도 필요도 없을 것 같습니다.
또 사용 시 주의할 점은 lambda 표현식 내에서는 변수를 만들 수 없습니다.
함수의 내용은 변수 없이 한 줄로 표현되어야 합니다. ( 변수가 필요한 코드라면 def로... )
>>> (lambda a: newVar = a; newVar)(1)
File "<stdin>", line 1
(lambda a: newVar = a; newVar)(1)
^
SyntaxError: invalid syntax
lambda는 간단하게 임시 함수를 생성할 수 있기 때문에 callback 함수에 파라미터로 많이 쓰입니다.
>>> def forFunc(func, num):
for i in range(num):
func()
>>> forFunc(lambda :print('hello'), 5)
'hello'
'hello'
'hello'
'hello'
'hello'
sorted, map, filter 함수처럼 일회성 함수를 파라미터로 넘겨야 하는 경우
위 예시처럼 사용하시면 코드의 간결함 및 메모리 절약할 수 있습니다.
또 위 예시처럼 매개변수가 필요 없는 경우 생략할 수 있습니다.