やりたいこと
- ジェネレータ式について入門する。
復習
- イテレータ、イテラブルオブジェクト、ジェネレータ、ジェネレータ関数、ジェネレータイテレータについてはこちらの記事にまとめました。手前味噌で恐縮ですが、よければ参照ください。
ジェネレータ式とは
- ジェネレータ関数の定義について、リスト内包表記を使って簡単に記述したもの。
ジェネレータ式を使わずに、defでジェネレータ関数を定義し、ジェネレータイテレータを取得する場合、以下のようになります。
def sample_generator_before():
for x in range(3):
yield x
g = sample_generator_before()
ジェネレータ式を使って、ジェネレータイテレータを取得する場合、以下のようになります。
# ジェネレータイテレータ = ( 式 for 取り出す要素 in イテラブルオブジェクト )
g = (x for x in range(2))
ジェネレータ式を使うと、関数の定義が不要なのでシンプルに書けますね。
複雑な処理を行いその値を返す場合は、ジェネレータ式ではなくジェネレータ関数を使うと良いかもしれません。
ちなみに、どちらの方法で作成したジェネレータイテレータも、以下のように要素を取り出すことができます。
print(g.__next__()) # 0
print(g.__next__()) # 1
print(g.__next__()) # 2
print(g.__next__()) # StopIteration