Python Code Reading 03 に行ってきました。01 と 02 は逃しましたが、ついに参加。
気になったのが最後のほうに話題になった softspace アトリビュート。file オブジェクトでも実装されていて、マニュアルには「print 文でカンマ区切りで複数の値を与えたときに、スペースを入れるか否かを指定する」と書かれていました。でも StringIO ではまたく使われていません。
会場では file オブジェクトとインターフェースを同じにしてるんじゃないのかなぁと適当なことを言いました。が、帰り道に「print 文がこのアトリビュートを見てるんでは?」と思いつきました。
>>> from StringIO import StringIO
>>> s = StringIO()
>>> s.softspace
0
>>> print >>s, 1, 2
>>> s.softspace = False
>>> print >>s, 3, 4
>>> s.getvalue()
'1 2\n3 4\n'
どうも関係ないっぽい。マニュアルを見てみると、
Note: This attribute is not used to control the print statement, but to allow the implementation of print to keep track of its internal state.
注意:このアトリビュートは print 文の制御に使われないが、print 文の実装において内部状態を追跡するのに使うことができる。
とあります。print 文がこれを見る余地はあるけれど、実際には見ていないっぽい。Python のコードを読む根性がないので、とりあえず今日はあきらめる。