repr/evalでお手軽シリアライズ?
Pythonのreprとevalを使ったらお手軽にシリアライズ・デシリアライズできるんじゃないか?
>>> d = {"x": 1.0, "y": 0.5} >>> repr(d) "{'y': 0.5, 'x': 1.0}" >>> eval(repr(d)) {'y': 0.5, 'x': 1.0}
という話を聞いて「いやいやNaNとかInfinityとかが通らないでしょ」と思ったわけだけど
>>> d = {"x": 1e999, "y": 1e999 / 1e999} >>> d {'y': nan, 'x': inf} >>> repr(d) "{'y': nan, 'x': inf}" >>> eval(repr(d)) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'nan' is not defined
週が開けてから、つっこむべきはそこじゃなくて「jsonモジュールを使えばいいじゃん」だと気づいた
>>> import json >>> json.dumps(d) '{"y": NaN, "x": Infinity}' >>> json.loads(json.dumps(d)) {u'y': nan, u'x': inf}
jsonモジュールは2.6から標準添付だよ!