- 메모리 절약, 가독성 향상, 코드 간결
- lambda 매개변수들: 식
- 람다표현식 (익명함수)
lambdaAdd = lambda n, m: n + m
print(lambdaAdd(2,3)) #5
print(lambdaAdd(4,5)) #9
print((lambda n, m: n if n % 2 == 0 else m)(1, 3))
#3
print((lambda n, m: n if n % 2 == 0 else m)(2, 3))
#2
함수 vs 람다
- 함수는 객체 생성 → 리소스(메모리) 할당
- 람다는 즉시 실행(Heap 초기화) ⇒ 메모리 초기화
def plus_ten(x):
return x + 10
plus_ten(1) # 11
plus_ten = lambda x: x + 10
plus_ten(1) # 11
(lambda x: x + 10)(1) # 11
람다 표현식 안에서는 변수를 만들 수 없다
- 람다 표현식에서 주의할 점은 람다 표현식 안에서는 새 변수를 만들 수 없다는 점입니다. 따라서 반환값 부분은 변수 없이 식 한 줄로 표현할 수 있어야 합니다. 변수가 필요한 코드일 경우에는 def로 함수를 작성하는 것이 좋습니다.
(lambda x: y = 10; x + y)(1)
SyntaxError: invalid syntax
- 단, 람다 표현식 바깥에 있는 변수는 사용할 수 있습니다. 다음은 매개변수 x와 람다 표현식 바깥에 있는 변수 y를 더해서 반환합니다.
y = 10
(lambda x: x + y)(1) # 11
람다 표현식을 인수로 사용하기
- 람다 표현식을 사용하는 이유는 함수의 인수 부분에서 간단하게 함수를 만들기 위해서 입니다. 이런 방식으로 사용하는 대표적인 예가 map입니다.
- 람다 표현식을 사용하기 전에 먼저 def로 함수를 만들어서 map을 사용해보겠습니다. 다음과 같이 숫자를 받은 뒤 10을 더해서 반환하는 함수 plus_ten을 작성합니다. 그리고 map에 plus_ten 함수와 리스트 [1, 2, 3]을 넣습니다. 물론 map의 결과는 map 객체이므로 눈으로 확인할 수 있도록 list를 사용해서 리스트로 변환해줍니다.
def plus_ten(x):
return x + 10
list(map(plus_ten, [1, 2, 3])) # [11, 12, 13]
- plus_ten 함수는 매개변수 x에 10을 더해서 반환하므로 리스트 [1, 2, 3]이 [11, 12, 13]으로 바뀌었습니다. 지금까지 map을 사용할 때 map(str, [1, 2, 3])와 같이 자료형 int, float, str 등을 넣었죠? 사실 plus_ten처럼 함수를 직접 만들어서 넣어도 됩니다.
list(map(lambda x: x + 10, [1, 2, 3])) # [11, 12, 13]
new_list = map(lambda x: x * x,[1,2,3,4,5])
list(new_list) # [1, 4, 9, 16, 25]