このプログラムの動きが知りたいです
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ランキング
-
ぱいソン
-
ハッシュ(単語数を数える) た...
-
pythonのerrorコード
-
パイソンのクラス
-
No route matches [GET] "/post...
-
Rubyについて質問です
-
Ruby:シルバーについて
-
実行時エラー450:引数の数が一...
-
正規表現で両端に文字列を置換
-
get() と find() の違いについて
-
VBA/GetTickCountの49.7日の境...
-
Csvファイルの最終行を取得する...
-
Rubyでクラスファイルをディレ...
-
テンプレートの特殊化でコンパ...
-
エラー「メソッドまたはデータ...
-
10円未満を切り捨てる方法は?
-
VBAで型が一致しないエラー(バ...
-
Ruby 特異メソッドのnewが先に...
-
Ruby
-
ruby:モジュール関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ぱいソン
-
ハッシュ(単語数を数える) た...
-
Access2000にExcel2000のデータ...
-
Rubyの超初心者です。「戻り値r...
-
Ruby Fileクラスについて
-
RubyのProcについて
-
自作したメソッド・・・こんな...
-
pythonのerrorコード
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
What class are you in? には何...
-
パイソンのクラス
-
教えてください。vb5.0
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
Rubyについて質問です
-
実行時エラー450:引数の数が一...
-
エクセルVBA オートフィルタで...
おすすめ情報