파이썬/기초 프로그래밍

Python 익명 함수(lambda) vs 일반 함수(def)

Data Jun 2025. 9. 13. 10:49

파이썬에서는 함수를 정의하는 방법이 크게 두 가지 있습니다.

  • 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 를 쓰는 것이 바람직하다.