このBlogは移転しました。今後は aish.dev を御覧ください。

Python2のsoftspace

いまさら言うのもなんだが、Python3ではファイルのsoftspaceが廃止されている。これはprintステートメントでテキストを出力するとき、先頭にスペースを付加するかどうかのフラグだ。Python2ではprintステートメントの最後に , をつけると

print "a",    # 改行文字を出力しない
print "b",    # 改行文字を出力しない
print "c"     # 改行文字を出力する

とすると、

a b c

のように改行文字を出力せず、文字の前に適切にスペースを付けて出力するようになっていた。

この動作を管理しているのがファイルオブジェクトのsoftspaceフラグで、

import sys
print "a",    # 改行文字を出力しない
sys.stdout.softspace=0
print "b",    # 改行文字を出力しない
print "c"     # 改行文字を出力する

とすると結果は

ab c

となる。この機能はprintステートメントでだけ有効で、例えば

import sys
print "a", 
sys.stdout.write("b")
print "c"

のようにファイルオブジェクトのwrite()メソッドを使うと、出力は

abc

となってしまう。Python3ではこのような暗黙のうちに使われるフラグは廃止するので、必要ならプログラムで明示的に行ってください、ということだろう。