일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 완전탐색
- 구현
- 백준
- 결제서비스
- 숫자 블록
- 트랜잭샨
- 레디스 동시성
- docker
- 디버깅
- 코드 계약
- 객체지향패러다임
- BFS
- 이분탐색
- 좋은 코드 나쁜 코드
- gRPC
- 프로그래머스
- AWS
- 셀러리
- 누적합
- spring event
- 깊게 생각해보기
- branch 전략
- jwt 표준
- piplining
- 카카오
- 검색어 추천
- 알람 시스템
- 수신자 대상 다르게
- prg 패턴
- 쿠키
- Today
- Total
코딩관계론
[python] key=lambda는 무슨 의미일까? 본문
람다는
람다(lambda) 함수는 파이썬에서 익명 함수(anonymous function)를 만들기 위해 사용됩니다. 익명 함수란 이름이 없는 함수로, 일회성으로 사용될 때 유용합니다.
장점
람다 함수의 장점은 메모리 절약에 있다.
함수를 생성자를 통해 생성하는 방법은 간단하게 다음과 같이 표현될 수 있습니다.
my_func = function(code, globals[, name[, argdefs[, closure]]])
코드와 이름을 담아서 함수클래스를 통해서 객체를 생성하고, 그 객체를 함수이름과 동일한 변수에 담는 과정을def키워드가 대신해 줍니다.
함수객체를 변수에 담은 시점에서, 함수객체는 메모리에 올라가서 변수를 통해 자신이 호출되기를 기다리게 되기에 단 한 번만 사용할 함수라면 불필요한 메모리를 낭비할 수 있습니다.
사용 방법
예시
# 1. 일반 함수 버전
def plus_two(x):
return x + 2
# 2. 람다 함수 버전
lambda x : x+2
# 1. 일반 함수 버전
def change_to_str(x):
return str(x)
result1 = list(map(plus_two, [1, 2, 3, 4, 5]))
print(result1)
# 2. 람다 함수 버전
result2 = list(map((lambda x: str(x)), [1, 2, 3, 4, 5]))
print(result2)
key=lambda의 의미
아래의 코드는 list 클래스에 정의된 sort 함수이다. 함수의 매개변수 값을 확인하시면 'key'라는 매개변수가 존재하는 것을 확인할 수 있습니다.
def sort(self: list[SupportsRichComparisonT], *, key: None = ..., reverse: bool = ...) -> None: ...
키의 역할을 공식 문서에서 확인해 보면 이렇게 정의하고 있다.
'list.sort()와 sorted()는 모두 비교하기 전에 각 리스트 요소에 대해 호출할 함수(또는 다른 콜러블)를 지정하는 key 매개 변수를 가지고 있습니다.'
즉 key의 매개변수로 넘겨줄 수 있는 것은 return 값이 있는 함수이다. 따라서 아래와 같은 방법으로 key값에 lowercased라는 함수를 전달할 수 있습니다.
def lowercased(word):
return word.lower()
words = ['Some', 'words', 'sort', 'differently']
words.sort(key=lowercased)
print(words)
#result:['differently', 'Some', 'sort', 'words']
하지만 보통은 람다 함수를 정의해 키 값을 넘겨줍니다.
람다함수를 사용하는 이유는 크게 두 가지가 존재한다. 간결성과 메모리 절약입니다.
간결성인 이유는 인라인 함수를 람다를 사용해 구현할 수 있기 때문입니다.
메모리 절약의 이유는 람다의 장점입니다.
따라서 대부분의 경우 아래와 같은 형식으로 key 값을 전달해 줍니다.
words = ['Some', 'words', 'sort', 'differently']
words.sort(key=lambda word: word.lower())
print(words)
#result:['differently', 'Some', 'sort', 'words']
그러나 람다 함수를 남발하면 코드 가독성이 떨어지는 문제가 있습니다. 람다 함수는 코드가 간단할 때만 사용하고, 기능이 복잡해지면 함수를 정의하는 것이 좋습니다.
또한, 람다 함수는 가급적이면 인자가 하나인 경우에 사용하는 것이 좋습니다. 인자가 여러 개인 경우에는 람다 함수를 중첩해서 사용하거나, 일반적인 함수를 정의하는 것이 더 좋습니다.
코드의 가독성과 유지보수성을 고려하여 적절한 상황에서 람다 함수를 사용하는 것이 좋습니다.
해당 글을 작성하기 위해 참조한 페이지입니다.
'개발 > python' 카테고리의 다른 글
[PYTHON] SET은 왜 O(1)의 시간복잡도를 가질까 (0) | 2023.03.12 |
---|