-
63 - (파이썬) 람다, key 키워드 매개변수study with Q - 파이썬 2024. 7. 3. 20:16
# 람다 (lambda)
: aka 간단한 함수를 간단하게 작성할 수 있게 해주는 문법: 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거로울 때 함수를 간단하게 선언하는 방법. 1회용 함수를 만들어야 할 때 주로 사용한다.
def square(number): return number**2 def is_even(숫자아): return 숫자아 % 2 == 0
위에서와 같이 굳이 저 간단한 함수 쓰겠다고 두 줄이나 소모하며 쓰는 것이며.. 모양새며 영 보기가 거시기혀.
그래서 한 줄의 return코드를 가지는 함수를 간단하게 하는 함수를 만듦 → 그게 바로 람다(lambda)
#쓰잘것없이 길고 뽀대나지 않던 함수가 def square(number): return number**2 #이렇게 콤팩트한 사이즈로 바뀌었답니다 타다- square = lambda number: number**2 print(square(10)) >>> 100
마찬가지로...
#쓰잘것없이 길고 뽀대나지 않던 함수가 def is_even(숫자아): return 숫자아 % 2 == 0 #이렇게 콤팩트한 사이즈로 바뀌었답니다 타다- is_even = lambda 숫자아 : 숫자아 % 2 == 0 print(is_even(10)) >>> True
참고로)
lambda 매개변수1, 매개변수2 : 매개변수1+매개변수2처럼 매개변수를 여러 개 받는 함수도 람다로 만들 수 있음.
pytha = lambda a, b: (a**2 + b**2)**0.5 print(pytha(3,4)) >>> 5.0
근디 이게 심플한 거긴 해?
# 람다를 인라인 함수로 사용
인라인 함수 : 한 줄 안에 무언가를 넣는 것
비끄므리)
인라인 스케이트...인라인 정렬, 인라인 코드A = [2,4,6,8,10] 이터레이터 = map(lambda number: number**2, A) print(list(이터레이터)) 이터레이ㅌ = filter(lambda 숫자아 : 숫자아 % 2 == 0, A) print(list(이터레이ㅌ)) >>> [4, 16, 36, 64, 100] [2, 4, 6, 8, 10]
# 리스트 함수의 key 키워드 매개변수
기억나나요? min()과 max()
lotto = [4,5,9,11,37,40] print(min(lotto)) print(max(lotto)) >>> 4 40
근데 리스트가 아니라 딕셔너리일 때는?
jamsil = [{ "좌석명" : "테이블석", "가격":"47000" },{ "좌석명" : "블루석", "가격":"20000" },{ "좌석명" : "오렌지석", "가격":"18000" },{ "좌석명" : "네이비석", "가격":"13000" }] print(min(jamsil)) print(max(jamsil)) >>> TypeError: '<' not supported between instances of 'dict' and 'dict'
딕셔너리는 비교할 수 없다는 에러코드
→ min(), max()가 갖고있는 key라는 이름의 키워드 매개변수를 사용한다.
key라는 이름의 키워드 매개변수는 무엇을 비교할지 return하는 함수를 넣어주면 된다.
jamsil = [{ "좌석명" : "테이블석", "가격":"47000" },{ "좌석명" : "블루석", "가격":"20000" },{ "좌석명" : "오렌지석", "가격":"18000" },{ "좌석명" : "네이비석", "가격":"13000" }] def 가격(요소): return 요소["가격"] print("최소 가격:", min(jamsil, key = 가격)) print("최대 가격:",max(jamsil, key = 가격)) >>> 최소 가격: {'좌석명': '네이비석', '가격': '13000'} 최대 가격: {'좌석명': '테이블석', '가격': '47000'}
얘도 람다로 작성 가능
jamsil = [{ "좌석명" : "테이블석", "가격":"47000" },{ "좌석명" : "블루석", "가격":"20000" },{ "좌석명" : "오렌지석", "가격":"18000" },{ "좌석명" : "네이비석", "가격":"13000" }] print("최소 가격:", min(jamsil, key = lambda 좌석: 좌석["가격"])) print("최대 가격:", max(jamsil, key = lambda 좌석: 좌석["가격"])) >>> 최소 가격: {'좌석명': '네이비석', '가격': '13000'} 최대 가격: {'좌석명': '테이블석', '가격': '47000'}
min, max말고 sort함수도 됨. (오름차순 정렬)
jamsil = [{ "좌석명" : "테이블석", "가격":"47000" },{ "좌석명" : "블루석", "가격":"20000" },{ "좌석명" : "오렌지석", "가격":"18000" },{ "좌석명" : "네이비석", "가격":"13000" }] jamsil.sort( key = lambda 좌석: 좌석["가격"]) print(jamsil) >>> [{'좌석명': '네이비석', '가격': '13000'}, {'좌석명': '오렌지석', '가격': '18000'}, {'좌석명': '블루석', '가격': '20000'}, {'좌석명': '테이블석', '가격': '47000'}]
※ lambda()는 key라는 이름의 키워드 매개변수로 사용한다.
'study with Q - 파이썬' 카테고리의 다른 글
65 - (파이썬) CSV 파일 읽고 쓰기 (1) 2024.07.08 64 - (파이썬) 기본 파일 처리 (0) 2024.07.08 62 - (파이썬) map/filter 함수 구현 (0) 2024.07.03 61 - (파이썬) 콜백함수, map/filter 함수 (0) 2024.07.01 60 - (파이썬) 튜플, 이뮤터블 자료, 뮤터블 자료 (0) 2024.06.24