【Python10】 ジェネレータ(generator)とイテレータ(iterator)について

それでは下記の記事の続きをやっていこう!
👇前回までは、コードがある一定の品質を保っているのかを確認する “pythonコードのテスト” について学習してきました。

今回は、ジェネレータ(generator)とイテレータ(iterator)について学習していきましょう!
この内容は、メモリ消費量をできるだけ抑えたコードで実装する必要がる場合など、開発するものによっては必須のスキルになってきます。

初学者にとってはなかなかとっつきにくい箇所もあるかと思いますが、一つずつ理解して進んでいけば問題ありません、頑張っていこう✊

ジェネレータ(generator)

ジェネレータとは

✅ メモリを節約する仕組み
✅全てのデータをメモリに置く代わりに、イテレーション時に毎回出力することで最小限のメモリ消費で抑えることができる(HDから取得や計算、もしくは両方)

👇ジェネレータの例をいくつか書いたので参考にしてください

ジェネレータを自作する

✅ return の代わりにyieldを使うと、その関数はgenerator(generator function)になる
✅ generator functionの戻り値はgenerator iteratorと呼ばれるもので、イテレーションによりyieldの値を返すオブジェクトとなる
✅ generatorは状態を保持している(次にyieldに値が入ってくるまで、保持する)

イテレータ(iterator)

イテレータ(iterator)とイテラブル(iterable)

generator:iterableの一種
✅ iterator:next()で回すことができて、iter()関数でイテレータ(iterator)を返すものの総称
✅ iter()関数でiteratorを返すものをiterableという(iteratorもiterable)

next()と.__next__()

✅ next(obj)はobj.__next__()と等しい
✅ iter()は__iter__()メソッドをcallしている
✅ next()で値を返すということは、__next__メソッドを実装しているということ

iteratorは__next__()と__iter__()が正しく実装されたオブジェクト

イテレータを自作する

generator expression

✅ yieldを使わないでgeneratorを作る
書き方はリスト内包表記と同様、括弧[]ではなく()を使う
✅ generator関数よりも簡潔に書ける

“ジェネレータ(generator)とイテレータ(iterator)”については以上になります、いかがだったでしょうか?この内容は一度で理解できなくても、繰り返し学習することで少しずつ理解が追いついてくると思います。

次回はデータベースについて学習していきたいと思います、楽しみにしててくださいね🙆‍♂️

今回はこの辺で、バイバイ👋