반응형
[Python] 파이썬 함수의 세계: 각종 함수 유형 마스터하기 - 2탄
이전 시리즈인 "1탄"에서는 파이썬의 기본적인 함수 유형인 내장 함수, 사용자 정의 함수, 익명 함수에 대해 탐구해보았습니다.
2023.10.16 - [파이썬(Python)] - [Python] 파이썬 함수의 세계: 각종 함수 유형 마스터하기 - 1탄
이번 2탄에서는 좀 더 고급 함수 유형을 살펴보며 파이썬에서의 함수 활용 방법을 깊게 이해해보겠습니다.
1. 고차 함수 (Higher-order Functions)
고차 함수란, 함수를 인자로 받거나, 함수를 반환하는 함수를 의미합니다. 대표적인 예로는 map, filter, reduce가 있습니다.
예제 1 : 리스트의 각 원소에 2를 곱하는 고차 함수 활용
numbers = [1, 2, 3, 4, 5]
doubled_numbers = list(map(lambda x: x*2, numbers))
print(doubled_numbers)
# 출력: [2, 4, 6, 8, 10]
예제 2: 리스트의 모든 원소를 더하는 고차 함수 활용
from functools import reduce
numbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_of_numbers)
# 출력: 15
2. 재귀 함수 (Recursive Functions)
재귀 함수는 함수 내부에서 자기 자신을 다시 호출하는 함수입니다. 대표적으로 피보나치 수열이나 팩토리얼 계산에 활용됩니다.
예제 1: 팩토리얼 계산하는 재귀 함수
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5))
# 출력: 120
예제 2: 리스트의 합을 구하는 재귀 함수
def recursive_sum(lst):
if not lst:
return 0
else:
return lst[0] + recursive_sum(lst[1:])
print(recursive_sum([1, 2, 3, 4, 5]))
# 출력: 15
3. 제너레이터 함수 (Generator Functions)
제너레이터 함수는 일반 함수와는 다르게, 실행될 때 값을 반환(return)하는 대신에 yield 키워드를 사용하여 값을 내보냅니다. 이를 통해 메모리를 효율적으로 관리할 수 있습니다.
예제 1: 0부터 4까지의 숫자를 생성하는 제너레이터 함수
def simple_generator():
for i in range(5):
yield i
gen = simple_generator()
for number in gen:
print(number)
# 출력:
# 0
# 1
# 2
# 3
# 4
예제 2: 제너레이터를 사용해 피보나치 수열 생성
def fibonacci_generator(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
gen = fibonacci_generator(5)
for number in gen:
print(number)
# 출력:
# 0
# 1
# 1
# 2
# 3
함수 유형 | 목적 | 이점 |
고차 함수 (Higher-order Functions) | 다른 함수를 인수로 받거나 함수를 반환하는 함수 | 코드 재사용성, 가독성, 모듈성 |
재귀 함수 (Recursive Functions) | 자신을 호출하여 문제의 해결을 위한 반복적인 작업을 수행하는 함수 | 간결성, 구조적 접근, 트리나 그래프와 같은 자료 구조에서의 유용성 |
제너레이터 함수 (Generator Functions) | 한 번에 모든 결과를 반환하는 대신 요청시마다 하나씩 결과를 생성 (반환)하는 함수 | 메모리 효율성, 큰 데이터셋 처리시 유연성 |
파이썬 함수의 세계 시리즈의 2탄에서는 고차 함수, 재귀 함수, 그리고 제너레이터 함수와 같은 고급 함수 유형들을 살펴보았습니다. 이러한 고급 함수 유형들을 실제 코딩에 통합함으로써, 여러분은 코드의 효율성을 한 단계 끌어올릴 수 있게 될 것입니다.
반응형
'프로그래밍 언어(Programming Languages) > 파이썬(Python)' 카테고리의 다른 글
[Python] @property 데코레이터로 캡슐화 구현하기 🛡️🐍 (38) | 2023.11.06 |
---|---|
[Python] 파이썬 데코레이터: 코드의 아름다움을 재구성하는 방법 (49) | 2023.10.31 |
[Python] 파이썬 함수의 세계: 각종 함수 유형 마스터하기 - 1탄 (52) | 2023.10.16 |
[Python] @dataclass로 서점 데이터베이스 만들기 (18) | 2023.10.13 |
[Python] @dataclass로 파이썬 클래스 마스터하기 (68) | 2023.10.11 |