기본 구조

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 반환)**