[Python] 람다 표현식 (lambda expression)

cdwde·2021년 5월 10일
0

🎈 람다 표현식

lambda 매개변수들 : 식

  • 함수의 기능을 런타임에 생성해서 사용할 수 있는 익명 함수

  • 결과 부분을 return 키워드 없이 자동으로 return해줌

  • 정의와 동시에 사용할 수 있음

  • 람다 표현식 안에서는 새 변수를 만들 수 없기에 변수가 필요한 코드면
    def로 함수 작성하기

  • 람다 표현식 자체를 호출하기 => (lambda 매개변수들 : 식)(인수들)

print((lambda x, y : x + y)(10, 20))

#출력 결과
#30
  • 기존의 함수식보다 메모리, 속도 면에서 우수
    • 파이썬은 OOP(객체 지향 프로그래밍) 언어이기 때문에 함수 또한 객체로 저장 => 함수를 정의하고 실행하면 해당 함수는 메모리에 올라가있음
    • But 람다 표현식은 한 번 사용되고 사라져서 메모리 걱정 필요 없음

🎈 람다 표현식 사용 예제

map()

a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
l = list(map(lambda x, y : x*y , a, b))
print(l)

#출력 결과
#[2, 8, 18, 32, 50]

reduce()

reduce(함수, 반복가능한객체)

  • 반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수

  • reduce(function, [1, 2, 3, 4, 5])에서 list는 [function(1, 2), 3, 4, 5]로 하나의 요소가 줄고, 요소가 하나 남을 때까지 reduce(function, [function(1, 2), 3, 4, 5]) 반복

  • ❗ 반복문으로 처리할 수 있는 경우 reduce 사용하지 말고 for, while 사용하기

from functools import reduce
nums = [i+1 for i in range(5)]
r = reduce(lambda x, y: x+y, nums)
print(r)

#출력 결과
#15

filter()

nums = [1, 3, 5, 7, 9, 11, 13]
l = list(filter(lambda x : x > 5 and x < 10, nums))
print(l)

#출력 결과
#[7, 9]

조건부 표현식 사용

lambda 매개변수들: 식1 if 조건식 else 식2

  • 람다 표현식에서 if를 사용했다면 반드시 else 사용하기
    (if만 사용하면 SyntaxError)
  • 람다 표현식 안에서는 elif 사용할 수 없음 => if를 연속적으로 사용해야함
  • ❗ 조건이 많은 경우 그냥 def로 함수 만들기
nums = [i+1 for i in range(10)]
l = list(map(lambda x: str(x) if x%2==0 else x, nums))
print(l)

#출력 결과
#[1, '2', 3, '4', 5, '6', 7, '8', 9, '10']

함수의 인자로 람다식 넣기

def func(f, word):
    print(f(1, 2))
    print(word)

func((lambda x, y : x + y), "hello")

#출력 결과
#3
#hello

정렬

  • sort()/sorted()의 key 인자로 비교 함수 보내주기
  • 비교할 아이템의 요소가 복수 개일 경우 튜플로 순서를 내보내줌
l = [4, 2, 1, 6, -1, 5, 10, -10, 8]
l.sort(key=lambda x: x)
print(l)

#출력 결과
#[-10, -1, 1, 2, 4, 5, 6, 8, 10]
l = [[1, '카'], [5, '라'], [3, '나'], [2, '다'], [1, '가']]
l.sort(key = lambda x : x[0])
print(l)

l.sort(key = lambda x : (x[0], x[1]))
print(l)



#출력 결과
#[[1, '카'], [1, '가'], [2, '다'], [3, '나'], [5, '라']]
#[[1, '가'], [1, '카'], [2, '다'], [3, '나'], [5, '라']]

참고
https://wikidocs.net/22804
https://dojang.io/mod/page/view.php?id=2359
https://dojang.io/mod/page/view.php?id=2360
https://m.blog.naver.com/PostView.nhn?blogId=pjok1122&logNo=221590043882&proxyReferer=https:%2F%2Fwww.google.com%2F
https://offbyone.tistory.com/73

0개의 댓글