파이썬에서는 함수를 정의하는 방법이 크게 두 가지 있습니다.
- def 키워드로 정의하는 일반 함수
- lambda 키워드로 정의하는 익명 함수
두 방법 모두 함수를 만들지만, 재사용성, 가비지 컬렉션(Garbage Collection), 가독성 측면에서 차이가 있습니다.
1. 익명 함수(lambda)란?
익명 함수는 이름이 없는 간단한 함수를 말합니다.
# 일반 함수
def add(x, y):
return x + y
# 익명 함수
add_lambda = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
print(add_lambda(3, 5)) # 출력: 8
둘 다 동일한 결과를 내지만, 익명 함수는 한 줄 표현으로 작성되며, 보통 짧고 간단한 연산에 쓰입니다.
2. 익명 함수의 특징 (메모리/영역 관점)
- 익명 함수는 변수에 담기거나 다른 함수의 인자로 전달될 때만 잠시 존재합니다.
- 즉, 함수가 필요 없는 순간 가비지 컬렉션 대상이 되어 메모리에서 사라집니다.
- 따라서 즉시 실행하고 버리는 용도로 적합합니다.
예시
print((lambda x, y: x + y)(2, 3)) # 출력: 5
# 함수 이름조차 없고, 실행 후 바로 메모리에서 해제됨
3. 일반 함수의 특징 (재사용성 관점)
일반 함수는 이름이 주어지므로, 코드 어디서든 재사용할 수 있습니다.
프로젝트가 커지고 동일한 로직을 여러 번 실행해야 한다면 일반 함수로 정의하는 것이 바람직합니다.
def multiply(x, y):
return x * y
print(multiply(2, 3)) # 출력: 6
print(multiply(5, 7)) # 출력: 35
여러 곳에서 multiply()를 반복 호출할 수 있습니다.
4. 언제 lambda를 쓰고 언제 def를 쓸까?
| 구분 | 익명 함수(lambda) | 일반 함수(def) |
| 가독성 | 한 줄로 간단하게 표현 | 코드가 길어도 명확하게 구조화 |
| 영역/생명주기 | 사용 후 즉시 소멸 (가비지 컬렉션) | 이름이 남아 재사용 가능 |
| 적합한 상황 | 간단한 연산, 일회성 처리 | 재사용이 필요한 함수, 복잡한 로직 |
5. 실제 활용 예시
# lambda 예시: 정렬 기준 함수
nums = [(1, 3), (2, 2), (3, 1)]
print(sorted(nums, key=lambda x: x[1]))
# 출력: [(3, 1), (2, 2), (1, 3)]
# def 예시: 재사용할 경우
def get_second(item):
return item[1]
print(sorted(nums, key=get_second))
# 필요할 때마다 get_second 함수 재사용 가능
정리하면
1️⃣ 익명 함수(lambda)
- 즉시 사용 후 소멸
- 가볍고 짧은 코드에 적합
2️⃣ 일반 함수(def)
- 이름이 있어 재사용 가능
- 복잡하거나 여러 번 호출되는 로직에 적합
따라서 일회성 작업은 lambda, 재사용성이 필요한 경우 def 를 쓰는 것이 바람직하다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| Python 함수 재사용: lambda보다 내부 함수 구조가 좋은 경우 (0) | 2025.09.13 |
|---|---|
| Python map 객체와 형 변환 (0) | 2025.09.13 |
| Python globals()로 동적 전역 변수 만들기 (0) | 2025.09.13 |
| Python에서 locals()로 함수의 로컬 영역 확인하기 (0) | 2025.09.13 |
| Python 함수 내 전역 변수(Global Variable) 사용하기 (0) | 2025.09.13 |