こんにちは、ぽころーです
今回はなんとなくわかるけどわかりづらい
pythonのジェネレータについて紹介します。
ジェネレータとは
ジェネレータとは、yield
文を使用し、反復可能なオブジェクトを生成する関数です。
ジェネレータには、return
文がありません。
その代わりにyield
文を使用するのです。
1回目のジェネレータの呼び出しに対して、1回目のyield文の内容を返す動きをします。
言葉では伝わりづらいので、簡単なコードを紹介します。
sample_generator
が呼ばれるたびに、1, 2,3 の値を返します。
def sample_generator():
yield 1
yield 2
yield 3
ジェネレータの使い方
ジェネレータがどのようなものかわかったところで、
次は、ジェネレータの使い方を紹介します。
実際のコードは以下の通りです。
my_generator
がジェネレータでyield
文を使用し、
あいさつを表示するジェネレータになっています。
ジェネレータの呼び出しには、next関数
を使用します。
def my_generator():
yield 'おはようございます'
yield 'こんにちは'
yield 'こんばんは'
greeting = my_generator()
print(next(greeting))
print(next(greeting))
print(next(greeting))
出力結果
おはようございます
こんにちは
こんばんは
greeting
変数にmy_generator
のオブジェクトを格納しています。
そして、next関数
によって、yield
文の内容をひとつずつ呼び出しています。
自分で、yield
文を追加したり、next関数
を増やしたり
試してみてください!
ジェネレータのメリット
ジェネレータの使い方を紹介しましたが、
なぜジェネレータを使用するのか疑問が湧いてくると思います。
なので、ジェネレータのメリットについても紹介します。
ジェネレータのメリットは、以下の2点です。
- メモリ効率が良い
- 処理速度が速い
それぞれについて詳しく説明していきます。
メリット1 メモリ効率の良さ
ジェネレータはメモリ効率が良いです。
配列やリストなどは、すべての要素分のメモリを保持します。
一方で、ジェネレータは必要なときに必要な分だけメモリを保持するため、
メモリ効率が良いのです。
for文
などループ文を使用した大規模なデータを扱いやすくできます。
メリット2 処理速度が速い
ジェネレータを使用することで処理速度を高速化させることができます。
メモリ効率と似た理由ですが、ジェネレータは必要分だけを生成するため、
無駄な処理をしなくていいので、その分処理が高速化されます。
まとめ
ジェネレータとは、yield
文を使用し、反復可能なオブジェクトを生成する関数です。
ジェネレータを使うことで、効率よくメモリを使用できたり、処理を高速化できたり
メリットがあります。
ジェネレータを使う場面は、そんなに多くないかもしれませんが、使いこなしていきましょう!