안녕하세요! 지난 시간에는 함수의 매개변수에 기본값을 설정하거나, *args와 **kwargs를 사용하여 유연하게 인자를 받는 방법에 대해 알아보았습니다. 이제 여러분의 함수는 다양한 호출 방식에 대응할 수 있게 되었죠!
이번 시간에는 파이썬에서 짧고 간결한 함수를 만들 때 매우 유용한 특별한 함수인 람다(lambda) 함수에 대해 알아보겠습니다. 람다 함수는 이름이 없는(익명) 함수이며, 주로 한 줄로 간단하게 표현되는 작은 기능을 수행할 때 사용됩니다.
정식으로 def 키워드를 사용하여 함수를 정의하는 것과는 조금 다른, 간결하고 즉흥적인 함수 생성 방식이라고 생각하시면 됩니다. 그럼, 람다 함수는 어떤 특징을 가지고 어떻게 활용되는지 함께 살펴볼까요?
Part 1: 람다(lambda) 함수란 무엇인가?
람다 함수는 다음과 같은 특징을 가집니다.
- 익명 함수(Anonymous Function): def 키워드를 사용하여 정의하는 일반 함수와 달리, 람다 함수는 이름이 없습니다.
- 한 줄 표현: 람다 함수는 오직 하나의 표현식(expression)으로만 이루어져야 합니다. 복잡한 로직이나 여러 줄의 코드는 람다로 표현하기 어렵습니다.
- 즉시 반환: 람다 함수의 표현식 결과는 자동으로 반환됩니다. return 키워드를 명시적으로 사용할 필요가 없습니다.
- 간결성: 간단한 작업을 수행하는 함수를 만들 때 코드를 매우 간결하게 작성할 수 있습니다.
1. 람다 함수 기본 형식
lambda 매개변수들: 표현식
- lambda: 람다 함수를 정의할 때 사용하는 키워드입니다.
- 매개변수들: 함수가 받을 인자들입니다. 쉼표(,)로 구분하며, 일반 함수와 동일하게 매개변수를 가질 수 있습니다. (없을 수도 있습니다.)
- : (콜론): 매개변수와 표현식을 구분하는 콜론입니다.
- 표현식: 람다 함수가 수행할 단 하나의 작업입니다. 이 표현식의 결과가 람다 함수의 반환값이 됩니다.
예시:
# 파일 이름: lambda_basic.py
# 두 숫자를 더하는 람다 함수
add = lambda x, y: x + y
print(f"5 + 3 = {add(5, 3)}") # 8
# 어떤 숫자를 제곱하는 람다 함수
square = lambda num: num * num
print(f"4의 제곱 = {square(4)}") # 16
# 매개변수가 없는 람다 함수
say_hello = lambda: "안녕하세요!"
print(f"인사말: {say_hello()}") # 안녕하세요!
# 조건부 표현식 (한 줄로 가능)
# num이 짝수면 "짝수", 홀수면 "홀수"
is_even_odd = lambda num: "짝수" if num % 2 == 0 else "홀수"
print(f"7은? {is_even_odd(7)}") # 홀수
print(f"8은? {is_even_odd(8)}") # 짝수
[VS Code 터미널 출력]

Part 2: 람다 함수와 일반 함수(def) 비교
람다 함수와 def로 정의하는 일반 함수는 둘 다 함수이지만, 목적과 특징에서 차이가 있습니다.
이름 | 이름이 있다 | 이름이 없다 (익명) |
형식 | def 함수이름(...): ... | lambda 매개변수들: 표현식 |
코드 블록 | 여러 줄의 문장(statements) 가능 | 단 하나의 표현식(expression)만 가능 |
반환 | return 키워드로 명시적 반환 | 표현식 결과 자동 반환 |
용도 | - 재사용 목적의 복잡한 기능<br/>- 여러 줄의 코드<br/>- 문서화(docstring) 가능 | - 한 줄로 표현 가능한 간단한 기능<br/>- 임시적으로 사용되는 함수<br/>- 다른 함수의 인자로 전달될 때 유용 |
예시: 일반 함수와 람다 함수 비교
# 파일 이름: lambda_vs_def.py
# 1. 일반 함수 (def)
def multiply_by_two_def(x):
return x * 2
result_def = multiply_by_two_def(5)
print(f"def 함수 결과: {result_def}") # 10
# 2. 람다 함수 (lambda)
multiply_by_two_lambda = lambda x: x * 2
result_lambda = multiply_by_two_lambda(5)
print(f"lambda 함수 결과: {result_lambda}") # 10
# 일반 함수는 여러 줄의 코드를 가질 수 있지만, 람다는 안 됩니다.
# def complex_operation_def(a, b):
# if a > b:
# return a - b
# else:
# return b - a
# 람다는 아래처럼 여러 줄의 문장/조건 분기를 직접 넣을 수 없습니다.
# complex_operation_lambda = lambda a, b: if a > b: a - b else: b - a # SyntaxError
[VS Code 터미널 출력]

Part 3: 람다 함수의 활용 (매우 중요!)
람다 함수는 그 자체로 단독 사용되기보다는, 주로 다른 함수의 인자(argument)로 전달될 때 강력한 힘을 발휘합니다. 특히 map(), filter(), sorted()와 같은 파이썬 내장 함수와 함께 자주 사용됩니다.
1. map() 함수와 람다 - 각 요소에 함수 적용
- map(함수, 반복_가능한_객체): 반복_가능한_객체의 각 요소에 함수를 적용하고, 그 결과를 새로운 map 객체로 반환합니다. list()로 감싸 리스트로 변환하여 확인합니다.
예시: 리스트의 모든 숫자를 제곱하기
# 파일 이름: lambda_with_map.py
numbers = [1, 2, 3, 4, 5]
# 일반 함수로 map 사용
def square_num(x):
return x ** 2
squared_normal = list(map(square_num, numbers))
print(f"일반 함수 (map): {squared_normal}")
# 람다 함수로 map 사용 (훨씬 간결!)
squared_lambda = list(map(lambda x: x ** 2, numbers))
print(f"람다 (map): {squared_lambda}")
# 각 문자열의 길이를 구하기
words = ["apple", "banana", "cat"]
word_lengths = list(map(lambda word: len(word), words))
print(f"문자열 길이 (map): {word_lengths}")
[VS Code 터미널 출력]

2. filter() 함수와 람다 - 특정 조건에 맞는 요소만 필터링
- filter(함수, 반복_가능한_객체): 반복_가능한_객체의 각 요소에 함수를 적용하여, 함수가 True를 반환하는 요소들만 필터링하여 새로운 filter 객체로 반환합니다. list()로 감싸 리스트로 변환하여 확인합니다.
예시: 리스트에서 짝수만 걸러내기
# 파일 이름: lambda_with_filter.py
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 일반 함수로 filter 사용
def is_even(num):
return num % 2 == 0
even_normal = list(filter(is_even, numbers))
print(f"일반 함수 (filter): {even_normal}")
# 람다 함수로 filter 사용 (훨씬 간결!)
even_lambda = list(filter(lambda x: x % 2 == 0, numbers))
print(f"람다 (filter): {even_lambda}")
# 5글자 이상인 단어만 필터링
words = ["apple", "cat", "banana", "dog", "elephant"]
long_words = list(filter(lambda word: len(word) >= 5, words))
print(f"긴 단어만 (filter): {long_words}")
[VS Code 터미널 출력]

3. sorted() 함수와 람다 - 커스텀 기준으로 정렬
- sorted(iterable, key=함수, reverse=False): iterable의 요소를 정렬한 새로운 리스트를 반환합니다. key 매개변수에 함수를 지정하면, 그 함수의 반환값을 기준으로 정렬합니다. 람다가 여기서 특히 강력하게 사용됩니다.
예시: 학생 정보를 점수 기준으로 정렬하기
# 파일 이름: lambda_with_sorted.py
# (이름, 나이, 점수) 튜플 리스트
students = [('Alice', 20, 85), ('Bob', 22, 90), ('Charlie', 21, 78)]
# 점수 (튜플의 인덱스 2)를 기준으로 정렬
# 일반 함수로 key 지정
def get_score(s):
return s[2] # s는 ('이름', 나이, 점수) 튜플, s[2]는 점수
sorted_by_score_normal = sorted(students, key=get_score)
print(f"일반 함수 (sorted, 점수 오름차순): {sorted_by_score_normal}")
# 람다 함수로 key 지정 (훨씬 간결!)
sorted_by_score_lambda = sorted(students, key=lambda s: s[2], reverse=True) # 점수 내림차순
print(f"람다 (sorted, 점수 내림차순): {sorted_by_score_lambda}")
# 나이 (인덱스 1)를 기준으로 정렬
sorted_by_age = sorted(students, key=lambda s: s[1])
print(f"람다 (sorted, 나이 오름차순): {sorted_by_age}")
[VS Code 터미널 출력]

마무리하며
이번 시간에는 파이썬의 작고 간결한 익명 함수인 람다(lambda) 함수에 대해 자세히 알아보았습니다. 람다 함수는 주로 한 줄로 표현 가능한 간단한 작업을 수행할 때 사용되며, 특히 map(), filter(), sorted()와 같은 고차 함수(다른 함수를 인자로 받는 함수)의 key 인자로 활용될 때 그 진가를 발휘합니다.
처음에는 낯설게 느껴질 수 있지만, 익숙해지면 코드를 훨씬 간결하고 효율적으로 작성하는 데 큰 도움이 될 것입니다.
다음 포스팅에서는 파이썬 변수가 영향을 미치는 범위인 **지역변수(Local Variable)와 전역변수(Global Variable)**의 개념과 주의할 점에 대해 알아보겠습니다.
궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!
'Python' 카테고리의 다른 글
4-6. 재귀 함수 이해하기 (0) | 2025.06.27 |
---|---|
4-5. 지역변수 vs 전역변수 (0) | 2025.06.26 |
4-1. 함수의 정의와 호출 (0) | 2025.06.25 |
3-6. 리스트/딕셔너리 내포 표현식 (0) | 2025.06.25 |
3-5. 자료구조 메서드 정리 (append, pop, update 등) (0) | 2025.06.24 |