pythonのジェネレータの使い方を知りたいです
def gen(maxnum): base=0 i=0 while i < maxnum: o=(yield base+i) if o is not None: base = o else: i+=1 g=gen(10) #1 print(next(g)) #2 print(next(g)) g.send(10) #3 print(next(g)) #4 print(next(g)) g.send(0) #5 print(next(g)) #6 print(next(g)) #7 print(next(g))
実行結果
0 1 12 13 4 5 6
試したこと
pythonの絵本から持ってきたコードです
print(next(g))がどのように処理され値が呼び出されるのかいまいちわかりません。
def gen(maxnum): base = 0 i = 0 while i < maxnum: o=(yield base + i) if o is not None: base = o else: i += 1
私なりには #1 print(next(g)) に呼び出しされ g=gen(10) が処理され上記defの関数の式が開始されて、
gen(maxnum)のところに(10)が代入され
while i < maxnum(10):となり、while文が処理されると考えていいのでしょうか?
while i < maxnum: o=(yield base + i) if o is not None: base = o else: i += 1
ここで処理では o=(yield base + i) で中断し呼び出し元にに戻ると記載されているのですが
o= base + iが戻り値になるのですか?
if o is not None: base = o else: i += 1
次に#2 print(next(g))が上記のコードから再開されるのでしょうか?
if o is not None: の意味はわかるのですがo変数がNoneになる場合とならない場合の処理を教えてください。
g.send(10)
send()メゾットはどこに値を送るのでしょうか?
補足情報(FW/ツールのバージョンなど)
情報不足ですみません。
回答2件
あなたの回答
tips
プレビュー