[Python] 제너레이터 (Generator)
반응형
Python에서 제너레이터(Generator)는 큰 데이터를 메모리에 효율적으로 처리할 수 있게 도와주는 특별한 이터레이터입니다. 일반적인 함수와 달리, 제너레이터는 값을 한 번에 하나씩 반환하고, 매번 호출될 때 이전 상태를 기억합니다. 제너레이터는 yield
키워드를 사용하여 값을 반환하며, return
을 사용하면 더 이상 값을 생성하지 않고 종료됩니다
제너레이터의 특징
- 메모리 효율성: 제너레이터는 값을 필요할 때마다 하나씩 생성하므로, 큰 데이터를 처리할 때 메모리를 아낄 수 있습니다.
- Lazy Evaluation(지연 평가): 모든 값을 한꺼번에 생성하지 않고, 요청할 때마다 값을 생성하여 반환합니다.
- 상태 유지:
yield
키워드 덕분에 함수의 상태가 유지되며, 중단된 위치에서 다시 시작할 수 있습니다.
기본 예제: 간단한 제너레이터 함수
아래의 예제는 yield
를 사용하여 1부터 3까지의 값을 하나씩 반환하는 제너레이터 함수입니다.
def simple_generator(): yield 1 yield 2 yield 3 for value in simple_generator(): print(value) # 출력: # 1 # 2 # 3

yield
가 호출될 때마다 함수의 상태를 기억하며, 다음 for
루프에서 호출하면 이전 위치에서 다시 시작합니다.
제너레이터로 큰 데이터 처리하기
일반적으로 range()
함수를 사용할 때 큰 범위를 다루게 되면 많은 메모리를 차지하게 됩니다. 이럴 때 제너레이터를 사용하면 효율적으로 메모리를 사용할 수 있습니다.
def large_range(n): for i in range(n): yield i for number in large_range(100): print(number) # 이 예제에서는 0부터 100까지의 값을 생성하면서, 매번 하나씩 출력합니다.

제너레이터 표현식
제너레이터 표현식은 리스트 내포와 비슷한 문법을 사용하여 간단히 제너레이터를 생성할 수 있습니다. ()
괄호를 사용해 리스트 내포를 제너레이터로 변환합니다.
squared_numbers = (x**2 for x in range(5)) for num in squared_numbers: print(num) # 출력: # 0 # 1 # 4 # 9 # 16

yield
와 return
의 차이점
yield
는 값을 반환하면서 함수의 상태를 유지하고, 다음에 호출될 때 이어서 실행됩니다.return
은 값을 반환하고 함수의 실행을 종료합니다.
제너레이터는 메모리 효율성을 높이고, 큰 데이터 처리를 쉽게 해주는 Python의 중요한 도구입니다. 큰 데이터 파일을 읽거나, 연속적인 계산을 처리할 때 매우 유용합니다.
반응형
'Tech & Development > Programming Languages' 카테고리의 다른 글
[Python] 함수형 프로그래밍 (0) | 2024.11.24 |
---|---|
[Python] 시간과 날짜 처리 (0) | 2024.11.23 |
[Python] 정규 표현식 (Regex) (0) | 2024.11.12 |
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners (0) | 2024.11.11 |
Python Packaging: pyproject.toml로 프로젝트 설정을 간편하게! (1) | 2024.04.25 |
댓글
이 글 공유하기
다른 글
-
[Python] 함수형 프로그래밍
[Python] 함수형 프로그래밍
2024.11.24함수형 프로그래밍은 함수를 일급 객체로 취급하며, 불변 데이터와 순수 함수를 중심으로 하는 프로그래밍 패러다임입니다. Python은 객체지향 언어이지만, 함수형 프로그래밍의 강력한 기능도 제공합니다. 이 글에서는 Python에서 제공하는 함수형 프로그래밍 기법과 이를 활용하는 방법을 다룹니다.1. 함수형 프로그래밍이란?함수형 프로그래밍은 다음과 같은 특징을 가지고 있습니다:순수 함수: 함수는 입력값만을 사용하며 외부 상태를 변경하지 않습니다.불변성: 데이터는 변경되지 않고, 항상 새 데이터를 반환합니다.고차 함수: 함수를 매개변수로 전달하거나 반환할 수 있습니다.Python에서 함수형 프로그래밍을 지원하는 주요 도구는 map(), filter(), reduce(), 그리고 lambda 함수입니다.2. m… -
[Python] 시간과 날짜 처리
[Python] 시간과 날짜 처리
2024.11.23Python은 날짜와 시간을 다루기 위한 강력한 모듈들을 제공합니다. datetime, time, calendar 모듈을 활용하면 다양한 날짜와 시간 작업을 간단히 수행할 수 있습니다. 이 글에서는 날짜와 시간을 다루는 기본적인 방법, 시간 계산, 특정 포맷 변환 등 유용한 기능들을 소개합니다.1. datetime 모듈: 날짜와 시간 처리의 기본datetime 모듈은 날짜와 시간 정보를 생성, 조작, 포맷팅 하는 데 사용됩니다.날짜와 시간 생성from datetime import datetime# 현재 날짜와 시간now = datetime.now()print("현재 날짜와 시간:", now)# 특정 날짜와 시간specific_date = datetime(2024, 12, 25, 15, 30)print("… -
[Python] 정규 표현식 (Regex)
[Python] 정규 표현식 (Regex)
2024.11.12정규 표현식(Regex, Regular Expression)은 문자열에서 특정 패턴을 찾고, 추출하거나, 치환할 때 사용하는 방법입니다. Python에서는 re 모듈을 통해 정규 표현식을 사용할 수 있습니다. 정규 표현식은 다양한 패턴을 통해 복잡한 문자열을 다룰 수 있어, 데이터 처리, 텍스트 분석, 웹 크롤링 등에 자주 활용됩니다.기본적인 정규 표현식 패턴정규 표현식에는 다양한 패턴이 있으며, 기본적인 패턴은 다음과 같습니다:. : 줄 바꿈 문자를 제외한 모든 문자 하나와 일치^ : 문자열의 시작을 의미$ : 문자열의 끝을 의미* : 앞의 문자가 0번 이상 반복됨을 의미+ : 앞의 문자가 1번 이상 반복됨을 의미? : 앞의 문자가 0번 또는 1번 나타남을 의미{n} : 정확히 n번 반복되는 패턴{n,… -
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners
2024.11.111. 리스트 내포 (List Comprehension)리스트 내포는 조건에 따라 요소를 필터링하거나 변환하여 새로운 리스트를 만들 수 있습니다. 예를 들어, 0부터 9까지의 숫자 중 짝수만 제곱한 리스트를 생성하려면 다음과 같이 작성할 수 있습니다.squares = [x**2 for x in range(10) if x % 2 == 0]print(squares) # [0, 4, 16, 36, 64]2. 딕셔너리 내포 (Dictionary Comprehension)딕셔너리 내포를 사용하면 키-값 쌍을 조건에 맞게 필터링하여 새로운 딕셔너리를 생성할 수 있습니다. 예를 들어, 0부터 4까지의 숫자와 그 제곱을 키-값으로 하는 딕셔너리는 다음과 같이 만들 수 있습니다.squares_dict = {x: x**2…
댓글을 사용할 수 없습니다.