![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
このプログラムの動きが知りたいです
range(10)を渡して
for element in iterable:で加算していく
yieldで戻り値を返す
ここがよくわかりません
print(gen)をするとリストみたいに値ではなく generator object なんたらかんたらと表示されます
def accumulate_generator(iterable):
current = 0
for element in iterable:
current += element
yield current
gen = accumulate_generator(range(10))
print(gen)
for e in gen: print(e)
No.2ベストアンサー
- 回答日時:
pythonの話ですよね。
yield を含む関数はgenerator functionといって
その呼び出しは関数の中味を実行するのではなく
generatorオブジェクトを返します。
generator はiteratorの一種で
__next__() メソッドを持ち
next関数で呼びだすことが出来ます。
最初の__next__メソッドの呼び出しでは
generator は最初のyield式まで実行し
yieldの引数の値を返します。
次回の__next__メソッドの呼び出しでは
generatorはyield式のところから実行を再開
次のyield式まで実行しyield式の引数の値を返します。
あなたの書いたgeneratorでは
next(gen) → 0を返す。
next(gen)→ 1を返す。
next(gen)→ 3を返す。
:
:
next(gen) → 45を返す。
next(gen) → Stopiteration例外発生
という動きになります。
for e in genは
next(gen)の戻りをeに代入し
Stopiteration例外が起きるまでループを回してくれます。
このような、呼び出しの途中で実行を中断、再開するような
処理の形態をコルーチンと言います。
メジャーな言語ではC#もサポートしてますが
珍しい言語機能です。
pythonでは多用されています。
また、asyncioパッケージではコルーチンで
強調型マルチタスク処理を実現しています。
pythonの言語機能のひとつの大きな柱といえます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- その他(プログラミング・Web制作) パイソンのプログラムで continue と passの違い 3 2022/03/25 07:38
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- その他(プログラミング・Web制作) プログラミング python 3 2023/06/14 03:55
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文系のSE志望です。プログラミ...
-
python3について。
-
vba クリップボードクリアにつ...
-
HTMLソースが表示のページのも...
-
Google ColaboでGUI作成
-
Google Colabでimport soxが出...
-
ホームページのプログラムの見...
-
IT業界より楽に稼げる業界って...
-
JRのjsonファイルって使って大...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
そのまま使っただけなのに・・...
-
Pythonのコードエラーについて...
-
このプログラミング言語のfor分...
-
プログラミング未経験者(殆ど未...
-
Windowsのアプリ開発ってなんの...
-
初心者が簡単なPowerShellスク...
-
ホワイトハッカー
-
恒久的リダイレクトについて
-
プログラマーと学歴の関係性に...
-
Pythonを勉強しています。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Rubyの超初心者です。「戻り値r...
-
【BrowseForFolderでデスクトッ...
-
python return 関数
-
【引数と戻り値の違い】 はじめ...
-
CloseとQuitについて
-
再帰に関する質問です。
-
ブロックつきメソッドやyield文...
-
railsチュートリアル5章の演習
-
ぱいソン
-
rubyでのproc
-
【Ruby】 文法的に何が悪いの...
-
Rubyにインクリメンタル演算子...
-
ハッシュ(単語数を数える) た...
-
Ruby 自作メソッドのブロック...
-
レコードセットオブジェクトの...
-
Ruby Fileクラスについて
-
timesの使いどころ
-
ジェネレーターとはなんですか?
-
Unixのwcコマンドの簡易版ですが
-
自作したメソッド・・・こんな...
おすすめ情報