本サイトは広告・プロモーションが含まれています
Python

【簡単理解】ジェネレータ と yield 【Python】

どうもこんにちは。
コンです。

最近Pythonを基本からしっかり勉強したいなって思って色々勉強させてもらっております。
5年も使っているのに、分からなかったり知らなかったことばかりでだなって思っております(笑)

下のような感じの記事が多いのも勉強のアウトプットとして書かせていただいております。


その中でもジェネレータという、イテレータの作成するツールが難しかったので
解説させていただけたらと思います。
(イテレータ:リスト・タプル(データ型)やrange, map(関数)など複数の要素をもつデータ構造)

ジェネレータ関数とyield文

ジェネレータ文は、yield文を使って1つずつ反復するデータを出力してます。

1 : yieldとreturn

実際にジェネレータ文を書いたコードを以下に記します。
return文で書いた場合も一緒に記入してます。

▷マークを押して実行してみてください!!

returnを使った場合26行目でエラーが起きてます。

yieldを記入した時にエラーにならないポイントとしては
生成したインスタンスを printした結果が

generator object 関数名

となっているところです。

書き方は、Classの基本であるインスタンスを生成して
そのインスタンスがfor文で繰り返し返し実行され、出力するのがyieldの内容になります。

2 : 2回実行してみたり、next使ってみたり

ジェネレータの特徴として前の結果が保存されて、再度実行すると続きからの結果が出てくるのが特徴です。

おわりに

ジェネレータの内容を以下にまとめさせていただきます。

  1. yield文で値を返した時に、処理の中断と値を記憶する
  2. 新たに値が要求されたら記憶した箇所から処理を再開する

これを繰り返すことでジェネレータは値を反復して出力するそうです。

ジェネレータを使いどきとしては、処理を順に行なっていく時に前の当たりを保持する必要がない場合などがよく使われるそうです。

リストを使うと、リスト全体を記憶しないといけないためメモリを消費してしまうのですが、
ジェネレータはそんな必要ないよ〜てのがメリットだそうです。

コン
コン
実際に私が普段使っているコードももしかしたら
無駄にメモリを使っているかもしれないので、見直そうって思いました

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA