파이썬에는 파이썬만의 독특한 문법이 있다. 특별한 생각이 없이 코딩을 하다보면, 비효율적으로 코드를 작성할 수 있다. 코드도 길어지고 내용도 지저분하며 시간이 오래 걸리는 경우가 있다. 다른 사람들은 코드를 어떻게 작성했나 보다면, 비슷한 내용의 코드를 훨씬 간결하고 깔금하게 작성한 경우가 있다. 하지만, 중간에 알 수 없는 문법들이 있어서 혼란스러울 때가 있다. 필자는 lambda 익명함수가 이런 것 중의 하나였다.

 

 

파이썬 익명함수, lambda

 

 

x를 입력값으로 받아 3을 리턴해주는 함를 아래와 같이 작성했다고 해보자.

def plus(x):
    return x+3
 
result=plus(3)
 
print(result)

 

이와 같은 함수를 lambda 함수로 정의하면, 아래와 같이 사용할 수 있다.

lambda x : x+3
a =lambda x : x+3
result=a(3)

print(result)

 

lambda 함수는 x가 input이 되고, ":" 뒤에 잇는 수식을 계산해서 값을 리턴해 준다. 여기서는 인자값을 하나만 넣었지만, 함수와 동일하게 2개, 3개... 그 이상도 넣을 수 있다.

 

 

lambda 함수는 수식 계산뿐만 아니라, if문을 활용한 분기에도 사용할 수 있다. 

(lambda x : True if x % 3 ==0 else False)

 

lambda에 함수 입력값을 넣을 때는 위와 같이 뒤에 괄호를 사용해서 넣어준다. 나머지 연산을 통해서 3의 배수인지 알려주는 코드이다.

 

 

파이썬 코딩

 

 

그 동안 작성한 코드에서 lambda를 이용하여 효율적으로 코딩할 수 있는 부분이 있는지 한 번 찾아보았다.

sale_profit_ratio=71.7777
temp_list=list()
sale_profit_ratio = round(sale_profit_ratio, 1)

temp_list.append(sale_profit_ratio)

 

lambda를 활용하여 코드를 효율적으로 짤 수 있는 부분이 많을 거라고 생각했는데, 생각보다 찾기가 어려웠다. 위에 코드는 dart api를 이용해서 회사의 매출총이익률을 구하는 코드인데, 매출총이익률은 71.7777로 나왔다고 가정하고 코드를 수정해 보았다.

 

뒤에 2줄을 lambda 함수를 이용하면 아래와 같이 수정할 수 있을 것 같다.

sale_profit_ratio=71.7777
 
temp_list=list()
 
temp_list.append( (lambda x: round(x,1))(sale_profit_ratio) )

 

좋은 예는 아닌 것 같지만, self를 인자 값으로 받는 함수인 경우에는 lambda 뒤에 입력값을 넣지 않고 사용해도 되는 듯 하다.

 

 

lambda함수 외에 컴프리핸션 문법을 이용하면 속도도 빠르고, 코드도 깔끔하게 작성할 수 있다. 컴프리핸션 문법에 대한 자세한 내용은 아래 포스팅을 참조하기 바란다.
( 참조: 파이썬 컴프리헨션 문법, for문과 if문 한 줄로 리스트 코딩하기 )

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">