2008-07-26

Python Code Reading 03

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 のコードを読む根性がないので、とりあえず今日はあきらめる。