すべての記事

【Python 基礎】ジェネレータとは?わかりやすく使い方を解説

広告この記事には広告・アフィリエイトリンクが含まれる場合があります。

目次

今回はジェネレータについて紹介します。

ジェネレータは、必要になったときだけ次の値を“遅延生成”する仕組みです。

大量データでもメモリをほとんど使わずに処理でき、前処理パイプラインやストリーム処理で威力を発揮します。

ジェネレータについて、Pythonのコードを含めて、詳しく説明していきます。

目的

講座名

到達点

レベル/前提

想定時間

こんな人に

評価

現場志向でPython×DSを通しで習得

米国データサイエンティストがやさしく教えるデータサイエンスのためのPython講座

Python基礎〜NumPy/Pandas/
Matplotlib/Seaborn、
Docker+JupyterLabでの環境構築までハンズオン

初心者〜初級(Mac推奨/軽いプログラミング経験があると◎)

24時間

Pythonの基礎固めは完了し、ステップアップをしたいかた

 
[review_stars 4.5/5]

広く一式を“ブートキャンプ”形式で学ぶ

【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜

統計・Python(Numpy/Pandas)〜機械学習(scikit-learn/TensorFlow)・可視化・Tableauまで網羅

初心者OK

26時間

データサイエンスとは何をする職業なのか知りたいかた

 
[review_stars 4/5]

AI/機械学習の入門(Colab対応・数学やさしめ)

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2025年最新版】

Python基礎+機械学習の基本(文字認識・株価分析などの小プロジェクト)をColabで体験

超初心者〜初級(中学数学レベルで可)

10時間

手を動かしてAIを学習したいかた

 
[review_stars 3/5]

ジェネレータとは

generator_image

ジェネレータとは、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文を使用し、反復可能なオブジェクトを生成する関数です。

ジェネレータを使うことで、効率よくメモリを使用できたり、処理を高速化できたり

メリットがあります。

ジェネレータを使う場面は、そんなに多くないかもしれませんが、使いこなしていきましょう!

参考(おすすめ教材)

コメント

コメントはまだありません