以下のようなコードがあるのですが、このコードでどのような流れで動いているのかを知りたいです。
自分の解釈では、while True : 以降は、
- yield n で send()で送られてきた値を受け取り、送られてきた値を返すとともに、 received に代入。
- if~else文で、もし received に値が入っていれば、n に received の値を代入。そうでなければ n に 1 を足して値を更新。
という流れだと思ったのですが、この流れの通りだと、以下のように send() で 10 を送った場合に、
- yield n で send(10)で送られてきた値 10 を受け取り、10 を返すとともに、 received に代入。
- if~else文で、 received に値 10 が入っているので、n に 10 を代入。
- while文により、最初に戻って、 n に 10 が入っているので yield n で 10 を返す。send() から値を受け取っていないので received に何も代入しない。
- if~else文で、 received に値が入っていないので、n に 1 を足して n の値を 11 に更新。
- 同様に、testgen() が実行されるたびに n の値が一つずつ増えていく。
という流れになり、1. と 3. で計2回、値 10 を返すことになるのですが、以下の実行結果の通り、10 は一回しか返されていません。
どういった流れなのかがよくわかっていないので教えていただけませんでしょうか。
Python
1>>>def testgen() : 2... n = 0 3... while True : 4... received = yield n 5... if received : 6... n = received 7... else : 8... n += 1 9... 10>>>gen = testgen() 11>>>next(gen) 120 13>>>gen.send(10) 1410 15>>>next(gen) 1611 17>>>next(gen) 1812
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 03:42 編集
2021/06/11 03:43 編集
2021/06/12 12:55
2021/06/15 08:21