Python入門【ジェネレータの使い方】

Python ジェネレータ

こんにちは、ミナトです。

Pythonではジェネレータという機能があり、ジェネレータを使うことで簡単にイテレータを定義できます。
ジェネレータを使うことで処理を一時停止して、途中で結果を返すことができます。

イテレータについてはこちらの記事をご確認ください。

Python入門【イテレータの使い方】

2021年6月22日
今回はPythonのジェネレータについて紹介するな😆
ジェネレータは簡単にイテレータを定義できる仕組みやで!
以下のような方を対象としています
  • Pythonのジェネレータの使い方を知りたい
  • Pythonでプログラミングを学びたい

ジェネレータの使い方

ジェネレータとは

ジェネレータは簡単にイテレータを定義できる仕組みのことで、関数の中でreturn文の代わりにyield文を使うことで定義できます。

ジェネレータとして動作する関数をジェネレータ関数と呼び、ジェネレータ関数を実行するとジェネレータオブジェクトが返却されます。

ジェネレータの定義

ジェネレータを定義するには、関数を定義する際にreturn文の代わりにyield文を使用します。

以下の例では、g = my_generator()でジェネレータを作成しています。このときmy_generator()の処理はまだ実行されず、ジェネレータオブジェクトが返却されます。

最初にnext()を呼んだタイミングで1が返却され、my_generator()の処理を一度抜けます。このときジェネレータは今の状態を覚えており、次にnext()呼ぶと途中から処理が再開されます。

ジェネレータを使うとyield文で処理が一時停止できるので、反復処理の間に別の処理を挟むことができます。
以下の例では途中でprint('処理AAA')を実行しています。

def my_generator():
    yield 1
    yield 2
    yield 3
    yield 4
    yield 5


g = my_generator()
print(next(g))
print('処理AAA')
print(next(g))
print('処理BBB')
print(next(g))


# 出力
1
処理AAA
2
処理BBB
3

また、これ以上返却するデータがない状態でnext()を実行すると「StopIteration」という例外が発生します。

ジェネレータ式

以前の記事で内包表記について解説しました。
ジェネレータも内包表記を利用して簡潔に記述できます。

Python入門【内包表記の使い方】

2021年6月21日
ジェネレータ式の書き方

(式 for 繰り返し変数 in シーケンス (if 条件式))

g = (i**2 for i in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

## 出力
0
1
4
9
16

まとめ

今回はPythonでのジェネレータの使い方について紹介しました。
ジェネレータの特徴を以下の通りです。

ジェネレータの特徴
  • 簡単にイテレータを定義できる仕組みのこと
  • ジェネレータ式が利用できる
  • 返却する要素がない場合、「StopIteration」の例外が発生する

最後まで読んでいただき、ありがとうございます。

この記事が「面白いな」、「勉強になったな」という方は、SNSでシェアしていただけると嬉しいです。