趣味のPython・深層学習

中級者のための実装集

ジェネレータ関連(yield, __init__, __next__)の初心者向け解説

ジェネレータの定義

ジェネレータはイテレータを作成するための特別な関数です。(ジェネレータによって作成されたイテレータをジェネレータイテレータとも呼びます。)

yieldによるジェネレータ実装

from typing import Generator

def simple_generator() -> Generator[int, None, None]:
    yield 1
    yield 2
    yield 3

Generator[int, None, None]: ジェネレータの型アノテーションです。

特殊メソッドでのジェネレータの実装

ジェネレータは iternext メソッドを特殊メソッドとして持っています。これらを実装することで、ジェネレータオブジェクトを作成できます:

from typing import Generator

class CountdownGenerator:
    def __init__(self, start: int) -> None:
        self.start = start

    def __iter__(self) -> Generator[int, None, None]:
        return self

    def __next__(self) -> int:
        if self.start > 0:
            result = self.start
            self.start -= 1
            return result
        else:
            raise StopIteration