> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 반복자와 생성기를 사용하는 방법

Python에서 반복자와 생성기를 사용하는 방법

王林
풀어 주다: 2024-08-09 10:20:05
원래의
665명이 탐색했습니다.

How to Work with Iterators and Generators in Python

Python에서 반복자와 생성기는 데이터 시퀀스 작업을 위한 강력한 도구입니다. 전체 시퀀스를 메모리에 저장하지 않고도 데이터를 반복할 수 있습니다. 이 블로그에서는 실용적인 예를 통해 반복자와 생성기를 간단하고 이해하기 쉬운 방식으로 설명합니다.

1. 반복자란 무엇입니까?

정의: 반복자는 컬렉션의 모든 요소(예: 목록 또는 튜플)를 한 번에 하나씩 탐색할 수 있는 Python의 개체입니다. 이는 __iter__() 및 __next__()라는 두 가지 메서드 구현을 포함하는 반복자 프로토콜을 따릅니다.

반복자의 작동 방식:

  • __iter__(): 이 메서드는 반복자 객체 자체를 반환합니다.

  • __next__(): 이 메서드는 컬렉션에서 다음 값을 반환합니다. 더 이상 반환할 항목이 없으면 StopIteration 예외가 발생합니다.

사용자 정의 반복자의 예:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

my_iter = MyIterator([1, 2, 3])
for item in my_iter:
    print(item)
로그인 후 복사

출력:

1
2
3
로그인 후 복사
로그인 후 복사

설명: 이 예에서 MyIterator는 숫자 목록을 반복하는 사용자 정의 반복자 클래스입니다. __next__() 메서드는 목록의 다음 항목을 반환하고 더 이상 반환할 항목이 없으면 StopIteration을 발생시킵니다.

내장 컬렉션의 기본 반복자

Python은 목록, 튜플, 사전 및 세트와 같은 내장 컬렉션에 대한 기본 반복자를 제공합니다. iter 함수를 사용하여 이러한 컬렉션에서 반복자를 가져온 다음 next를 사용하여 컬렉션을 반복할 수 있습니다.

목록의 예:
my_list = [1, 2, 3]
my_iter = iter(my_list)

print(next(my_iter))  # Output: 1
print(next(my_iter))  # Output: 2
print(next(my_iter))  # Output: 3
# print(next(my_iter))  # This will raise StopIteration
로그인 후 복사

2. 생성기란 무엇입니까?

정의: 생성기는 함수와 Yield 키워드를 사용하여 정의되는 Python의 특수한 유형의 반복자입니다. 생성기를 사용하면 값을 한꺼번에 메모리에 저장하지 않고도 일련의 값을 반복할 수 있으므로 목록보다 메모리 효율성이 더 높습니다.

발전기 작동 방식:

  • 항복: 항복 키워드는 값을 생성하고 함수를 일시 중지하여 상태를 저장하는 데 사용됩니다. 생성기가 다시 호출되면 중단된 부분부터 실행이 다시 시작됩니다.

예:

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for item in gen:
    print(item)
로그인 후 복사

출력:

1
2
3
로그인 후 복사
로그인 후 복사

설명: 이 예에서 my_generator는 세 개의 값을 하나씩 생성하는 생성기 함수입니다. 각 항복 호출은 값을 생성하고 다음 값이 요청될 때까지 함수를 일시 중지합니다.

3. 생성기 사용의 이점

메모리 효율성: 생성기는 즉시 값을 생성하고 전체 시퀀스를 메모리에 저장하지 않으므로 대규모 데이터 세트 또는 데이터 스트림 작업에 이상적입니다.

예:

def large_sequence():
    for i in range(1, 1000001):
        yield i

gen = large_sequence()
print(next(gen))  # Output: 1
print(next(gen))  # Output: 2
로그인 후 복사

설명: 이 생성기는 메모리에 모두 저장하지 않고 백만 개의 숫자 시퀀스를 생성하여 메모리 효율성을 보여줍니다.

4. 반복자와 생성자의 사용 사례

반복자:

  • 사용자 정의 반복 가능 객체: 반복 논리에 대한 추가 제어가 필요한 경우

  • 무한 시퀀스: 센서의 데이터와 같이 끝없이 이어지는 값 시퀀스를 생성합니다.

발전기:

  • 지연 평가: 대규모 데이터 세트를 한 번에 한 항목씩 처리합니다.

  • 파이프라인: 스트리밍 방식으로 데이터를 처리하는 데이터 처리 파이프라인을 구축합니다.

5. 생성기 표현식

정의: 생성기 표현식은 생성기를 생성하는 간결한 방법을 제공합니다. 목록 이해와 유사하지만 대괄호 대신 괄호를 사용합니다.

예:

gen_exp = (x * x for x in range(5))
for value in gen_exp:
    print(value)
로그인 후 복사

출력:

0
1
4
9
16
로그인 후 복사

설명: 이 생성기 표현식은 0에서 4까지의 숫자를 제곱하는 생성기를 생성합니다.

6. 실제 사례 및 모범 사례

예 1: 대용량 파일 읽기

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line

for line in read_large_file('large_file.txt'):
    print(line.strip())
로그인 후 복사

설명: 이 생성기 함수는 큰 파일을 한 줄씩 읽어 한 번에 한 줄씩 생성합니다. 전체 파일을 메모리에 로드하지 않기 때문에 메모리 효율적입니다.

예 2: 피보나치 수열

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib = fibonacci()
for _ in range(10):
    print(next(fib))
로그인 후 복사

출력:

0
1
1
2
3
5
8
13
21
34
로그인 후 복사

설명: 이 생성기 함수는 무한한 피보나치 수열을 생성합니다. 생성기를 사용하여 잠재적으로 무한한 값 시퀀스를 생성하는 방법을 보여줍니다.

7. Interview Questions and Answers

  1. What is an iterator in Python?
* An iterator is an object that allows you to traverse through all the elements of a collection one at a time, implementing the `__iter__()` and `__next__()` methods.
로그인 후 복사
  1. What is a generator in Python?
* A generator is a special type of iterator defined using a function and the `yield` keyword, allowing you to generate values on the fly without storing them all in memory.
로그인 후 복사
  1. What are the benefits of using generators?
* Generators are memory-efficient, as they generate values on the fly. They are useful for processing large datasets, building data pipelines, and working with potentially infinite sequences.
로그인 후 복사
  1. How do generator expressions differ from list comprehensions?
* Generator expressions use parentheses and produce values one at a time, whereas list comprehensions use square brackets and generate the entire list in memory.
로그인 후 복사

위 내용은 Python에서 반복자와 생성기를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿