Pythonのジェネレーターの使い方について。
この記事の内容はコチラです
- Pythonのジェネレーターの使い方
- ジェネレーターとは?
今回は、Pythonのジェネレーターの使い方の例を説明します。
Pythonのジェネレーター
ジェネレーターとは
Pythonのジェネレーターはわかるようなわからないような・・・
「ジェネレーター」とは生成器という意味で、おもにジェネレーター関数のことを指します。ジェネレータ関数とはシーケンスを作成する関数です。
ジェネレータは言葉で説明すると難しく感じるのですが、下の例をみてもらうとすぐに意味がわかると思います。
ジェネレーター構文
def 関数(str): for s in str(): yield s
# ジェネレーターを呼び出す ジェネレータ変数 = 関数(文字列): next(ジェネレータ変数)
Pythonのジェネレータとは戻り値を「yield」で返すジェネレーター関数です。
ジェネレータは「next(変数)」で1つずつ取り出すことができます。
例1. ジェネレータを使って文字を取り出す
def get_str(str): for s in str: yield s
関数「get_str」がジェネレータ関数です。受け取った文字列「str」を「for ~ in」で1文字ずつとりだし、「yield」で返します。
戻り値を「return」ではなく「yield」で返すので、関数「get_str」はジェネレータ関数となります。
ジェネレータの特徴はここですね。ジェネレータ関数を作った時点では要素数が決まっていません。他から要素を与えられてはじめて確定します。
いわゆる遅延実行というやつです。
gen = get_str('abc') str = next(gen) print(str) #[結果] a str = next(gen) print(str) #[結果] b str = next(gen) print(str) #[結果] c
ジェネレータ関数「get_str」に文字列「abc」を渡して実行しました。
ジェネレータから1つずつ取り出すには「next」を使います。nextするたびに1つずつ文字列を取り出すことができました。
例2. ジェネレータで生成できない
str = next(gen) print(str) #[結果] StopIteration
例1でジェネレータ関数「get_str」に文字列をわたして1つずつ取り出しましたが、要素数を超えて「next」して取り出すとどうなるか?
例1のあとに再度「next」すると、エラーになりました。当然ですが、要素数を超えるとエラーとなります。
少しとっつくにくいジェネレータを例を使って解説しました。あまり使用頻度は多くないと思いますが、知っておいて損はないかと。
以上、Pythonでジェネレーターを使って順番に取り出す方法でした。
コメント