이 글에서 다루는 개념
Python에서는 함수형 프로그래밍(Functional Programming) 개념을 활용하여 보다 간결하고 효율적인 코드를 작성할 수 있습니다.
이번 글에서는 다음 내용을 학습합니다.
- 고차 함수(First-Class Function) 개념
- map(), filter(), reduce() 함수 활용법
- 리스트 컴프리헨션(List Comprehension)과 비교
- 함수형 프로그래밍을 활용한 실용적인 예제
1️⃣ 함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)은 함수를 일급 객체(First-Class Citizen)로 다루는 프로그래밍 패러다임입니다.
Python은 객체지향 언어이지만, 함수형 프로그래밍 요소도 지원합니다.
📌 Python의 함수형 프로그래밍 특징
- 함수를 변수에 저장할 수 있음
- 함수를 인자로 전달 가능
- 함수를 반환할 수 있음
def square(x):
return x * x
# 함수를 변수에 할당
func = square
print(func(5)) # 25
2️⃣ map(), filter(), reduce() 함수
Python의 map(), filter(), reduce() 함수는 반복문을 줄이고 가독성을 높이는 함수형 도구입니다.
🔹 map() – 모든 요소에 함수 적용
map(함수, 이터러블)을 사용하면 모든 요소에 함수를 적용할 수 있습니다.
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # [1, 4, 9, 16, 25]
🔹 filter() – 특정 조건을 만족하는 요소 필터링
filter(함수, 이터러블)을 사용하면 특정 조건을 만족하는 요소만 남길 수 있습니다.
numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4, 6]
🔹 reduce() – 누적 연산 수행
reduce(함수, 이터러블)을 사용하면 누적 연산을 수행할 수 있습니다.
(⚠ functools.reduce를 사용해야 함)
from functools import reduce
numbers = [1, 2, 3, 4, 5]
sum_result = reduce(lambda x, y: x + y, numbers)
print(sum_result) # 15 (1+2+3+4+5)
3️⃣ 리스트 컴프리헨션 (List Comprehension)
리스트 컴프리헨션을 사용하면 반복문 없이 리스트를 생성할 수 있습니다.
# 일반적인 방법
numbers = [1, 2, 3, 4, 5]
squared = [x**2 for x in numbers]
print(squared) # [1, 4, 9, 16, 25]
📌 리스트 컴프리헨션과 map() 비교
numbers = [1, 2, 3, 4, 5]
# map() 사용
squared_map = list(map(lambda x: x**2, numbers))
# 리스트 컴프리헨션 사용
squared_list = [x**2 for x in numbers]
print(squared_map) # [1, 4, 9, 16, 25]
print(squared_list) # [1, 4, 9, 16, 25]
💡 리스트 컴프리헨션은 map()보다 가독성이 좋고 성능도 더 좋음!
🔹 조건이 포함된 리스트 컴프리헨션
# 짝수만 필터링
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
📌 리스트 컴프리헨션과 filter() 비교
numbers = list(range(10))
# filter() 사용
evens_filter = list(filter(lambda x: x % 2 == 0, numbers))
# 리스트 컴프리헨션 사용
evens_list = [x for x in numbers if x % 2 == 0]
print(evens_filter) # [0, 2, 4, 6, 8]
print(evens_list) # [0, 2, 4, 6, 8]
📌 실전 문제: 함수형 프로그래밍 연습하기
✅ 문제 1: map()을 사용하여 리스트의 각 요소를 제곱하기
📌 리스트 [1, 2, 3, 4, 5]의 각 요소를 제곱한 새로운 리스트를 생성하세요.
numbers = [1, 2, 3, 4, 5]
# 🔽 여기에 코드 작성
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # [1, 4, 9, 16, 25]
✅ 문제 2: filter()를 사용하여 홀수만 추출하기
📌 리스트 [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 홀수만 추출하세요.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 🔽 여기에 코드 작성
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odds = list(filter(lambda x: x % 2 != 0, numbers))
print(odds) # [1, 3, 5, 7, 9]
✅ 문제 3: reduce()를 사용하여 리스트의 모든 값 곱하기
📌 리스트 [1, 2, 3, 4, 5]의 모든 값을 곱한 결과를 반환하세요.
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 🔽 여기에 코드 작성
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 120
✅ 문제 4: 리스트 컴프리헨션을 사용하여 1부터 10까지 제곱값 리스트 생성하기
📌 1부터 10까지 숫자의 제곱을 리스트 컴프리헨션으로 생성하세요.
# 🔽 여기에 코드 작성
squared = [x**2 for x in range(1, 11)]
print(squared) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
'Data Engineering > python' 카테고리의 다른 글
EP14 | 고급 Python 활용 #3 | 비동기 프로그래밍 (AsyncIO) (0) | 2025.03.19 |
---|---|
EP13 | 고급 Python 활용 #2 | 멀티스레딩과 멀티프로세싱 (0) | 2025.03.19 |
EP11 | Python 심화 개념 #5 | 모듈과 패키지 관리 (0) | 2025.03.19 |
EP10 | Python 심화 개념 #4 | 예외 처리와 로깅 (Logging & Exception Handling) (0) | 2025.03.19 |
EP09 | Python 심화 개념 #3 | 정규표현식(Regex)과 문자열 처리 (0) | 2025.03.19 |