╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Python/Python 기초

[Python] 함수 4 (lambda, 삼항연산자, 활용 )

재안안 2022. 3. 11. 15:54

def와 lambda 둘다 함수를 만들 때 사용하지만 사용 목적과 용도가 다르다.

그 사용목적과 용도중 둘의 가장 큰 차이점을 꼽자면

lambda이름 없는 함수를 만들고

lambda 함수에는 single expression만 사용할 수 있다는 것이다.

그리고 lambda는 간단하다. 함수를 만들 때 한 줄 이면 된다.

 

여기서 이해를 위해 statement와 expression의 차이점을 간단하게 설명해보자면

statement는 각각 독립적으로 실행될 수 있는 문장이고

expression은 독립적으로 실행될 수 없고 연산 또는 수식이다. 결국엔 하나의 '값'으로 계산이 된다.

 

lambda의 사용형식부터 아래의 예제를 통해 설명하겠다.

 

lambda keyword

 

lambda 함수를 만드는 방법은 lambda parameter : single expression(lambda 변수 : 수식)이다.

아래의 예제를 통해 확인해 보겠다.

 

lambda 사용 예제
12+7

해당 예제에서 주석처리된 함수와 lambda함수는 같다고 생각해도 무방하다.

sum_num의 12,7은 x,y로 넘어가서 12+7이 print함수로 반환된다.

 

원래 lambda의 용도가 이렇게 간단한 수식으로 표현할 수 있는 함수들을 대체하기 위함이다.

 

아래의 예제를 통해 또 다른 방법을 확인해 보자.

 

lambda 사용 예제 2
실행 결과

삼항연산자(Ternary operator)도 single expression에 속한다.

파이썬에서 삼항연산자의 사용형식은 True값 if 조건 else False값이다.

해당 예제에서는 조건문이 참일 경우 'Yes'를 거짓일 경우 'No'를 반환한다.

 

삼항연산자가 보기엔 간결해보이지 않지만 그래도 if~else를 간결하게 표현한 것이다.

만약 if~else를 실행문(statement)로 표현했다면 여러줄일 것이다.

그런데 만약 코드가 너무 길어져서 한눈에 잘 안보이는 경우에는 그냥 if~else문으로 길더라도 보기 쉽게 적는게 좋다.

 

 

lambda 함수는 활용으로서 빛을 바란다.

 

아래에서 lambda 함수를 활용하기 좋은 대표적인 예시들을 알아보겠다.

 

map(function, iterable)

filter(fun, iterable)

 

이외에도 sort(), reduce()등등 많다.

 

여기서 function은 함수인자

iterable은 반복가능 객체이다. 여기선 문자열, 리스트, 튜플정도로 생각해도 좋다.

 

추가적으로 이외에도 sort(), reduce()등등 더 있다.

 

아래의 예제들을 통해 lambda함수의 활용에 대해 알아보겠다.

 

map(function, iterable)

 

map 함수 사용 예제
실행 결과

 

map함수는 주어진 함수를 통해 iterable의 값을 차례대로 연산한 을 map 객체로 저장하는 함수다.

그리고 이때 map함수는 map object를 반환하니 원소들을 보려면 list()를 사용해서 바꿔주어야 한다.

이는 실행결과를 통해 print(map)과 print(list)의 차이점을 볼 수 있다.

 

해당예제에서 map함수의 인자에서 lambda의 사용을 이해하면 되겠다.

만약 def를 사용했으면 아래와 같은 코드일 것이다.

 

def food_upgrade(x):

     return x+' 2.0'

 

upgrade=list(map(food_upgrade, my_food))

 

 

filter(fun, iterable)

 

filter 사용 예제
실행 결과

filter함수는 간단하게 원소을 솎아내어 filter 객체로 반환하는 함수이다.

filter함수도 map함과 같이 리스트로 변환해주어야 원소를 볼 수 있다.

 

해당 예제에서도 lmbda의 사용을 보면 map에서 사용된 방법은 같다는 걸 알 수 있다.

x[0]=='c'에 의해 반환된 원소만 반환된 filter 객체에 존재한다.

 

 

만약 해당 예제에서 filter대신 map을 사용했다면 아래와 같이 반환된다.

 

map vs filter

정리하자면

map은 모든 값들을 반환하고

filter는 값들을 솎아낸다.