今回はジェネレータについて紹介します。
ジェネレータは、必要になったときだけ次の値を“遅延生成”する仕組みです。
大量データでもメモリをほとんど使わずに処理でき、前処理パイプラインやストリーム処理で威力を発揮します。
ジェネレータについて、Pythonのコードを含めて、詳しく説明していきます。
| 目的 | 講座名 | 到達点 | レベル/前提 | 想定時間 | こんな人に | 評価 |
|---|---|---|---|---|---|---|
| 現場志向でPython×DSを通しで習得 | 米国データサイエンティストがやさしく教えるデータサイエンスのためのPython講座 | Python基礎〜NumPy/Pandas/ Matplotlib/Seaborn、 Docker+JupyterLabでの環境構築までハンズオン | 初心者〜初級(Mac推奨/軽いプログラミング経験があると◎) | 24時間 | Pythonの基礎固めは完了し、ステップアップをしたいかた | |
| 広く一式を“ブートキャンプ”形式で学ぶ | 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜 | 統計・Python(Numpy/Pandas)〜機械学習(scikit-learn/TensorFlow)・可視化・Tableauまで網羅 | 初心者OK | 26時間 | データサイエンスとは何をする職業なのか知りたいかた | |
| AI/機械学習の入門(Colab対応・数学やさしめ) | みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2025年最新版】 | Python基礎+機械学習の基本(文字認識・株価分析などの小プロジェクト)をColabで体験 | 超初心者〜初級(中学数学レベルで可) | 10時間 | 手を動かしてAIを学習したいかた |
ジェネレータとは

ジェネレータとは、yield文を使用し、反復可能なオブジェクトを生成する関数です。
ジェネレータには、return文がありません。
その代わりにyield文を使用するのです。
1回目のジェネレータの呼び出しに対して、1回目のyield文の内容を返す動きをします。
言葉では伝わりづらいので、簡単なコードを紹介します。
sample_generator が呼ばれるたびに、1, 2,3 の値を返します。
def sample_generator():
yield 1
yield 2
yield 3ジェネレータの使い方
ジェネレータがどのようなものかわかったところで、
次は、ジェネレータの使い方を紹介します。
実際のコードは以下の通りです。
my_generator がジェネレータでyield 文を使用し、
あいさつを表示するジェネレータになっています。
ジェネレータの呼び出しには、next関数 を使用します。
def my_generator():
yield 'おはようございます'
yield 'こんにちは'
yield 'こんばんは'
greeting = my_generator()
print(next(greeting))
print(next(greeting))
print(next(greeting))出力結果
おはようございます
こんにちは
こんばんはgreeting 変数にmy_generator のオブジェクトを格納しています。
そして、next関数によって、yield文の内容をひとつずつ呼び出しています。
自分で、yield文を追加したり、next関数 を増やしたり
試してみてください!
ジェネレータのメリット
ジェネレータの使い方を紹介しましたが、
なぜジェネレータを使用するのか疑問が湧いてくると思います。
なので、ジェネレータのメリットについても紹介します。
ジェネレータのメリットは、以下の2点です。
- メモリ効率が良い
- 処理速度が速い
それぞれについて詳しく説明していきます。
メリット1 メモリ効率の良さ
ジェネレータはメモリ効率が良いです。
配列やリストなどは、すべての要素分のメモリを保持します。
一方で、ジェネレータは必要なときに必要な分だけメモリを保持するため、
メモリ効率が良いのです。
for文 などループ文を使用した大規模なデータを扱いやすくできます。
メリット2 処理速度が速い
ジェネレータを使用することで処理速度を高速化させることができます。
メモリ効率と似た理由ですが、ジェネレータは必要分だけを生成するため、
無駄な処理をしなくていいので、その分処理が高速化されます。
まとめ
ジェネレータとは、yield文を使用し、反復可能なオブジェクトを生成する関数です。
ジェネレータを使うことで、効率よくメモリを使用できたり、処理を高速化できたり
メリットがあります。
ジェネレータを使う場面は、そんなに多くないかもしれませんが、使いこなしていきましょう!


