본문 바로가기

파이썬/문법

[Python] lambda 함수란?

반응형
lambda [parameters] : expression (표현식)

 

파이썬에는 람다(lambda)라는 이름이 없는 inline 함수가 있다.

 

비교적으로 간단한 함수에 대하여 lambda로 만들어서 함수 호출 시 필요할 때 전달해주는 형태로 많이 사용한다.

 

주어진 함수를 먼저 보도록하자.

 

def get_square_num(number):
	return number ** 2
    
print(get_square_num(2))

 

넘겨받은 숫자를 제곱하여 반환하는 get_square_num 함수를 구현해보았다.

 

이를 람다(lambda)로 변환하였을 경우 이렇게 된다.

a = lambda x: x ** 2
print(a(2))

 

파이썬은 함수 자체를 변수로 취급하기때문에 간단하게 구현할 수 있다.

주어진 라인을 해석하자면

 

a라는 변수에 lambda 함수를 저장하겠다. lambda 함수는 x라는 변수를 가지고 있으며 이 x라는 변수를 제곱하겠다.

a함수에 2를 넣어 출력하겠다.

 

여기서 변수는 반드시 x라고 쓰지 않아도 되고 변수는 1개 이상일 수도 있다.

 

a = lambda x, y: x * y
print(a(2, 3))

 

다음과 같은 함수도 구현이 가능하다.

 

이제 실제로 어떤식으로 이 함수를 사용 할 수 있는지 보도록하자.

 

data = """height,weight,label
140,45,normal
145, 72, fat
150,61,fat
137,56,fat
192,48,thin
175,77,fat"""

 

csv 파일을 읽어온 data가 있다고 하자.

 

이를 각 line별로 list에 저장하는 함수를 만들어보겠다.

 

data2 = data.split('\n')
data3 = []
for a in range(len(data2)):
    temp = list(map(lambda x: float(x) if x.isdigit() else x.strip(), data2[a].split(',')))
    data3.append(temp)
print(data3)

 

이 코드는 temp 부분만 해석해보겠다.

 

각 라인별 데이터를 , 단위로 map 해서 1개의 항목씩을 가져오겠다.

여기서 함수(lambda) 를 통해 각 항목을 분류하겠다. 만약 x가 숫자라면 float 타입으로 가져오고, 아니라면 x.strip()으로 데이터를 가져오겠다.

 

최종적으로 data3 에는 2차원 list가 저장되는 것을 확인할 수 있다.

 

이 코드의 문제점은 72의 경우 isdigit 에 걸리지 않기때문에 float타입으로 저장되지 않고 저장된다는 문제점이 있다.

반응형

'파이썬 > 문법' 카테고리의 다른 글

Python, MySQL 연결  (0) 2022.09.23
[파이썬] List Comprehension  (0) 2022.07.24
[Python] filter란?  (0) 2022.06.27