lambda 인자들: 표현식
│ │ │
│ │ └── 반환값 (return이 자동, 한 줄만 가능)
│ └── 매개변수 (없어도 됨, 여러 개도 됨)
└── "**이름 없는 함수를 만든다**"는 키워드
def랑 비교:
# 일반
def add(x, y):
return x + y
# Lambda
add = lambda x, y: x + y
add(2, 3) # 5
이게 def랑 가장 큰 차이, lambda 본문엔 값으로 평가되는 표현식 하나만 올 수 있음
lambda x: x + 1 # 가능
lambda x: print(x) # 가능
lambda x: x = 1 # 불가능, 대입문 안 됨
lambda x: # 불가능, 여러 줄 안 됨
y = x + 1
return y
lambda x: "양수" if x > 0 else "음수" # 가능, if문이 아니라 if 표현식
"양수" if x > 0 else "음수"
| | |
참일때 조건 거짓일때
lambda는 보통 변수에 담기보다(이 경우 def가 더 유리), 다른 함수의 인자로 바로 넘길 때 사용:
# 정렬 기준
sorted(users, key=lambda u: u[1])
# map / filter
list(map(lambda x: x * 2, [1, 2, 3])) # [2, 4, 6]
list(filter(lambda x: x % 2 == 0, [1, 2, 3])) # [2]
# 콜백, 기본 동작 지정
data.get("key", lambda: "default")
참고. sorted 구조
sorted(iterable, key=함수, reverse=불린)
- iterable : 정렬 대상 (어떤 iterable이든, 결과는 항상 list)
- key : 비교 기준 함수 (lambda 자주 씀, 튜플 반환하면 다중 기준)
- reverse : True면 내림차순
**sorted() → 새 리스트 반환 (원본 유지)
---**
**.sort() → 원본 변경 (list만, None 반환)**