滞在31日目 (2/11)

Pythonのジェネレータでの動作ではまり,それを解明するのに相当の時間を使ってしまった.ああ,認識違いとは恐ろしいと思った今日一日.一歩前に進めた気もするが疲労困憊.ゲントに滞在し始めてから,朝は8時30ぐらいには研究室に行き,帰りは6時前と,日本にいるときより滞在時間は短いが密度というか集中力が高まっているので毎日疲れてる気がする.しかし,食生活が安定してきたのか体重は増加傾向?体重計もないので分かりませんが.日本に帰ったときに痩せていることを望みます 笑

Pythonのジェネレータでオブジェクトを返す

def gen():
    a = []
    for x in range(10):
        a.append(x)
        yield a

b = [x for x in gen()]

というコードを実行して,bには,

[[0], [0,1], ... , [0,1,2,3,4,5,6,7,8,9]]

という値が入っていると期待していたのに,実際は

[[0,1,2,3,4,5,6,7,8,9], ..., [0,1,2,3,4,5,6,7,8,9]]

となるのを理解するまでに時間がかかった.リスト内包で実行するとオブジェクトでは参照が渡されるので結局最後の実行時の結果がリストの全ての値になるのだと言うことか.どおりでforループで回していたときには予想していた値が来ていたのに,リスト内包すると来ない訳だ.