【プログラミング教育ナビ】は、プログラミング初心者が自分に合った勉強法や教室を見つけられたり、プログラミングに特化した求人が検索できたり、SaaSの比較ができるサイトです。人気講座のある入門スクールや独学できる学習サイトを、口コミ・評判で比較してランキング形式でご紹介しています。言語から探す場所から探す条件から探すrsstwitterfacebook案件獲得できなかったら全額返金!未経験からプロのエンジニアスキルを身につけ、フリーエンジニアとして稼げるまで徹底サポート。まとめはじめに任意の要素を持つシーケンスを作ってみたいと思ったことはありませんか?リスト内包表記を使えば、非常に柔軟にシーケンスを生成できますが、あらかじめすべての要素を生成する必要がないこともあります。リストなどでは無限個の要素を持つシーケンスを生成することはできません。素数のシーケンスなどです。そのため、Pythonには「ジェネレーター」という仕組みが用意されています。この記事では、Python初心者の方向けに、Pythonのジェネレーターの作り方・使い方について説明していきます。便利な機能なので、ぜひとも覚えておきましょう。イテレーターのおさらいジェネレーターはイテレーターの一種とも考えることができ、使い方もよく似ています。そのため、ジェネレーターを学ぶ前にイテレーターについてしっかり理解しておかなければいけません。ここでは、リストを例に基本的なイテレーターの使い方をみてみましょう。5]:print(item)リストはシーケンスの一種で、イテレーション可能です。for文に渡すと、自動的にイテレーターが取得され、ループ中で各要素が取り出されます。ジェネレーターもこれと似たような動作をしますが、シーケンスとはひとつ重要な違いがあります。シーケンスとジェネレーターの違いリストなどのシーケンスは、作成時点からすべての要素が存在しています。ジェネレーターは作成時には、まだ要素が存在していません。これがジェネレーター(生成器)と呼ばれるゆえんで、必要になったときに適宜要素が生成されます。このため、シーケンスのようにインデックスでアクセスすることができません。リストならX番目の要素を直接取り出すことができますが、ジェネレーターではX個要素を生成する必要があります。このように、ジェネレーターは「遅延実行」であり、シーケンスとは特性が異なっています。基本的なジェネレーターの作り方・使い方それでは、基本的なジェネレーターの作り方・使い方をみていきましょう。10):print(n)ジェネレーターは、関数として定義します。通常の関数と違うのは、値を返すときにreturnではなくyieldを使うことです。例では、引数で渡されたstartからendまでの整数を生成するジェネレーターを作っています。yieldキーワードに注目して下さい。ジェネレーターはイテレーション可能なので、直接for文に渡すことができます。ジェネレーター関数を実行すると、ジェネレーターが返されます。ジェネレーターは通常の関数とは違い、yieldキーワードで値を返して一時停止します。次の値を生成するときには、yieldの次の行から再開します。yieldキーワードを複数記述することも可能で、次のような例も実行できます。nums():print(n)ジェネレーターは、yieldキーワードで一時停止するということをしっかり覚えておきましょう。ジェネレーターで無限個の要素を生成するジェネレーターは遅延実行という特性を持っているため、無限個の要素を生成するジェネレーターを作ることができます。breakprint(n)例では、無限に整数を生成するジェネレーターを定義しています。そのままでは無限ループしてしまうため、if文を使ってfor文から明示的に抜けるようにしています。このように、ジェネレーターは使い方次第でいろいろと活用できます。まとめシーケンスとジェネレーターの違いがお分かりになりましたか?ジェネレーターは、遅延実行であることに注意しましょう。その特性を活かせば、無限個の要素を生成するジェネレーターを作ることもできます。必要な要素のみを適宜生成できるため、うまく使えばパフォーマンスの向上も図れるでしょう。対象に応じて、適切に使い分けて下さい。投稿者:プログラミング教育ナビ編集部tweetプログラミングで挫折しそうなら、現役エンジニアにマンツーマンで相談してみませんか?オンラインのプログラミングスクール「TechAcademy」のメンターが対応。人気の記事まだデータがありません。【プログラミング教育ナビ】は、プログラミング初心者が自分に合った勉強法や教室を見つけられたり、プログラミングに特化した求人が検索できたり、SaaSの比較ができるサイトです。人気講座のある入門スクールや独学できる学習サイトを、口コミ・評判で比較してランキング形式でご紹介しています。