파이썬 이것저것/파이썬 기초

[Python] 람다 표현식 사용하기

agingcurve 2023. 5. 8. 22:12
반응형

람다 표현식 : 익명함수를 통해 다른 함수의 인수를 넣을 때 사용합니다.

 

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))