본문 바로가기

Python

4-4. 람다(lambda) 함수

파이썬 람다 함수 타이틀


 

안녕하세요! 지난 시간에는 함수의 매개변수에 기본값을 설정하거나, *args와 **kwargs를 사용하여 유연하게 인자를 받는 방법에 대해 알아보았습니다. 이제 여러분의 함수는 다양한 호출 방식에 대응할 수 있게 되었죠!

이번 시간에는 파이썬에서 짧고 간결한 함수를 만들 때 매우 유용한 특별한 함수인 람다(lambda) 함수에 대해 알아보겠습니다. 람다 함수는 이름이 없는(익명) 함수이며, 주로 한 줄로 간단하게 표현되는 작은 기능을 수행할 때 사용됩니다.

정식으로 def 키워드를 사용하여 함수를 정의하는 것과는 조금 다른, 간결하고 즉흥적인 함수 생성 방식이라고 생각하시면 됩니다. 그럼, 람다 함수는 어떤 특징을 가지고 어떻게 활용되는지 함께 살펴볼까요?


Part 1: 람다(lambda) 함수란 무엇인가?

람다 함수는 다음과 같은 특징을 가집니다.

  • 익명 함수(Anonymous Function): def 키워드를 사용하여 정의하는 일반 함수와 달리, 람다 함수는 이름이 없습니다.
  • 한 줄 표현: 람다 함수는 오직 하나의 표현식(expression)으로만 이루어져야 합니다. 복잡한 로직이나 여러 줄의 코드는 람다로 표현하기 어렵습니다.
  • 즉시 반환: 람다 함수의 표현식 결과는 자동으로 반환됩니다. return 키워드를 명시적으로 사용할 필요가 없습니다.
  • 간결성: 간단한 작업을 수행하는 함수를 만들 때 코드를 매우 간결하게 작성할 수 있습니다.

1. 람다 함수 기본 형식

Python
 
lambda 매개변수들: 표현식
  • lambda: 람다 함수를 정의할 때 사용하는 키워드입니다.
  • 매개변수들: 함수가 받을 인자들입니다. 쉼표(,)로 구분하며, 일반 함수와 동일하게 매개변수를 가질 수 있습니다. (없을 수도 있습니다.)
  • : (콜론): 매개변수와 표현식을 구분하는 콜론입니다.
  • 표현식: 람다 함수가 수행할 단 하나의 작업입니다. 이 표현식의 결과가 람다 함수의 반환값이 됩니다.

예시:

Python
 
# 파일 이름: 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/>- 다른 함수의 인자로 전달될 때 유용
Sheets로 내보내기

예시: 일반 함수와 람다 함수 비교

Python
 
# 파일 이름: 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()로 감싸 리스트로 변환하여 확인합니다.

예시: 리스트의 모든 숫자를 제곱하기

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 map 함수와 람다 사용 예시

2. filter() 함수와 람다 - 특정 조건에 맞는 요소만 필터링

  • filter(함수, 반복_가능한_객체): 반복_가능한_객체의 각 요소에 함수를 적용하여, 함수가 True를 반환하는 요소들만 필터링하여 새로운 filter 객체로 반환합니다. list()로 감싸 리스트로 변환하여 확인합니다.

예시: 리스트에서 짝수만 걸러내기

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 filter 함수와 람다 사용 예시

3. sorted() 함수와 람다 - 커스텀 기준으로 정렬

  • sorted(iterable, key=함수, reverse=False): iterable의 요소를 정렬한 새로운 리스트를 반환합니다. key 매개변수에 함수를 지정하면, 그 함수의 반환값을 기준으로 정렬합니다. 람다가 여기서 특히 강력하게 사용됩니다.

예시: 학생 정보를 점수 기준으로 정렬하기

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 sorted 함수와 람다 사용 예시

마무리하며

이번 시간에는 파이썬의 작고 간결한 익명 함수인 람다(lambda) 함수에 대해 자세히 알아보았습니다. 람다 함수는 주로 한 줄로 표현 가능한 간단한 작업을 수행할 때 사용되며, 특히 map(), filter(), sorted()와 같은 고차 함수(다른 함수를 인자로 받는 함수)의 key 인자로 활용될 때 그 진가를 발휘합니다.

처음에는 낯설게 느껴질 수 있지만, 익숙해지면 코드를 훨씬 간결하고 효율적으로 작성하는 데 큰 도움이 될 것입니다.

다음 포스팅에서는 파이썬 변수가 영향을 미치는 범위인 **지역변수(Local Variable)와 전역변수(Global Variable)**의 개념과 주의할 점에 대해 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형