지난 글에서는 Python의 map, filter, reduce 함수를 통해 Functional Programming의 기본 개념을 다뤄보았습니다. 이번 글에서는 Python에서 함수형 프로그래밍을 더욱 풍부하게 만들어주는 고급 기능, 즉 함수형 프로그래밍의 핵심 개념들과 Python에서 이를 지원하는 요소들에 대해 살펴보겠습니다. 이 글에서는 특히 익명 함수(lambda), 일급 객체로서의 함수, 클로저(closure), 그리고 고차 함수(higher-order function)의 개념들을 다루려 합니다.
그럼 하나씩 살펴보도록 하겠습니다!

1. 익명 함수(lambda)
lambda는 익명 함수로서, 말 그대로 이름이 없는 함수를 생성하는 데 사용됩니다. 일반적으로 짧고 간단한 함수가 필요할 때 사용됩니다. 이전 글에서도 lambda를 활용한 예시를 보셨겠지만, 조금 더 다양한 사례를 살펴보겠습니다.
예제: 리스트의 각 요소를 2배로 만들기
numbers = [1, 2, 3, 4, 5]
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers) # [2, 4, 6, 8, 10]
[code 해석]
- lambda x: x * 2는 입력값 x를 받아 2배로 만드는 익명 함수입니다.
- map은 이 lambda 함수를 리스트의 각 요소에 적용합니다.
예제: 조건부 로직이 포함된 lambda
numbers = [-1, 2, -3, 4, -5]
positive_numbers = list(map(lambda x: x if x > 0 else 0, numbers))
print(positive_numbers) # [0, 2, 0, 4, 0]
[code 해석]
- lambda 내부에 삼항 연산자를 활용해 음수를 0으로 변환합니다.
- 익명 함수와 조건부 로직을 결합한 활용 예입니다.
2. 일급 객체로서의 함수
Python에서 함수는 일급 객체로 취급됩니다. 이는 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수에서 반환값으로 사용할 수 있음을 의미합니다.
예제: 함수를 변수에 할당
def greet(name):
return f"Hello, {name}!"
# 함수 할당
say_hello = greet
print(say_hello("Alice")) # Hello, Alice!
예제: 함수 인자로 전달
def apply_function(func, value):
return func(value)
def square(x):
return x ** 2
result = apply_function(square, 5)
print(result) # 25
[code 해석]
- square 함수가 apply_function의 인자로 전달됩니다.
- 이는 함수형 프로그래밍의 유연함을 보여줍니다.
3. 클로저(Closure)
클로저는 함수 내부에서 정의된 함수가 바깥 함수의 변수를 기억하는 메커니즘을 의미합니다. 클로저는 상태를 유지하거나 캡슐화를 구현하는 데 유용합니다.
예제: 클로저를 활용한 상태 유지
def make_multiplier(factor):
def multiplier(number):
return number * factor
return multiplier
# multiplier 클로저 생성
multiply_by_3 = make_multiplier(3)
print(multiply_by_3(10)) # 30
[code 해석]
- make_multiplier는 factor를 캡처한 클로저를 반환합니다.
- multiply_by_3은 factor=3의 상태를 유지합니다.
4. 고차 함수(Higher-order Function)
고차 함수는 다른 함수를 인자로 받거나, 함수를 반환하는 함수입니다. Python의 map, filter, reduce 역시 고차 함수의 일종입니다.
예제: 고차 함수로 동작 변경하기
def add_prefix(prefix):
def formatter(word):
return f"{prefix} {word}"
return formatter
add_hello = add_prefix("Hello")
print(add_hello("World")) # Hello World
예제: 동작 조합하기
def compose(func1, func2):
return lambda x: func1(func2(x))
def square(x):
return x ** 2
def increment(x):
return x + 1
square_then_increment = compose(increment, square)
print(square_then_increment(3)) # 10
[code 해석]
- compose 함수는 두 함수를 조합해 새로운 함수를 생성합니다.
- square_then_increment는 입력값을 제곱한 후 1을 더합니다.
이번 글에서는 lambda, 일급 객체, 클로저, 고차 함수와 같은 Python 함수형 프로그래밍의 고급 개념을 다뤘습니다. 다음 글에서는 오늘 소개한 개념적인 요소들의 고급 활용법 등에 대해서 살펴보겠습니다. 읽어 주셔서 감사합니!
'⌨️Programming > 🐍Python' 카테고리의 다른 글
Python Functional Programming #1 (2) | 2024.12.12 |
---|---|
Python List Comprehension 마스터 하기 (0) | 2021.09.08 |