반응형
람다 표현식 : 익명함수를 통해 다른 함수의 인수를 넣을 때 사용합니다.
def puls_ten(x):
return x + 10
puls_ten(1)
해당 함수를 람다식으로 작성
lambda x: x + 10
해당 방법으로는 함수를 호출이 불가함 따라서, 람다식에 변수를 할당해주어야 합니다.
puls_ten = lambda x: x + 10
puls_ten(1)
람다식 자체를 호출하려면 괄호로 묶어주면 됩니다.
(lambda x: x + 10)(1)
람다의 표현식 안에는 새변수를 만들 수 없으며, 반환값 부분은 변수 없이 식 한줄로 표현 해야 합니다.
단, 람다 표현식 바깥에 있는 변수는 사용이 가능합니다.
## 매개변수 x와 람다 표현식 바깥에 있는 변수 y를 더해 반환
y=10
(lambda x: x + y)(1)
람다 표현식을 사용하는 이유는 간단하게 함수를 만들기 위해서 사용하며, 대표적으로 map함수를 이용하여 작성합니다.
## 함수를 만들어서 map 함수 적용
def puls_ten(x):
return x + 10
list(map(puls_ten, [1, 2, 3]))
해당 함수를 람다식으로 표현 시,
list(map(lambda x: x+10, [1,2,3]))
더욱 간단하게 표현 가능합니다.
람다식에 조건부 표현 사용
## map을 사용하여 리스트 a에서 3의 배수면 문자열로 변환하고 아닐 경우 x요소 그대로 반환
a = [i for i in range(1, 11)]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))
주의할 점은 람다 표현식 안에서 조건부 표현을 사용할 경우, :(콜론)을 붙이면 안됩니다.
또한 람다식 안에서는 elif를 사용할 수 없습니다. 따라서 조건부 표현식은 식 1 if 조건식 1 else 식2 if 조건식2 else 식3 형식처럼 if를 연속으로 사용해야 합니다.
· lambda 매개변수: 식1 if 조건식1 else 식2 if 조건식2 else 식3
## 1은 문자열 1로 변환, 2는 실수로 변환, 3 이상은 10으로 더함
a = [i for i in range(1, 11)]
list(map(lambda x: str(x) if x == 1 else float(x) if x== 2 else x + 10 , a))
해당식은 간단한 기능을 하지만 복잡해 보이므로, 그냥 if문으로 작성하는게 좋습니다
map함수에는 여러 객체를 넣을 수 도 있습니다.
## 매개변수를 2개로 지정하여 할당
a = [i for i in range(1, 6)]
b = [i for i in range(1, 11) if i % 2 == 0]
list(map(lambda x, y: x * y, a, b))