본문 바로가기
Engineering WIKI/Python

파이썬 람다식

by wonos 2022. 5. 25.
  • 메모리 절약, 가독성 향상, 코드 간결
  • 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 매개변수들: 식)(인수들)
(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] 

'Engineering WIKI > Python' 카테고리의 다른 글

Generator  (0) 2022.05.30
일급함수  (1) 2022.05.30
파이썬 2진수, 8진수, 10진수, 16진수 변환  (0) 2022.05.26
추상클래스(abstract class)  (1) 2022.05.25
파이썬 퀵 정렬  (0) 2022.05.25
Python3 vs Pypy3  (0) 2022.05.25
Python TDD  (0) 2022.05.23
파이썬 상속 (Inheritance)  (0) 2022.05.23