読者です 読者をやめる 読者になる 読者になる

methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

print_function

http://d.hatena.ne.jp/kazkun/20090529/1243560131

他の言語の経験が長いためか、Pythonの面倒なところ、嫌なところはたくさんでてくる。

※例えばprintで最後を改行もせず空白も空けない事ができないとか、副作用を持ったプロシジャが値を返してくれないとか

print は pythonic ではないと認識されていて、 py3k では関数になります。
Python 2.6 でも from __future__ import print_function とすると、

print("foo", 3, "baz", end='', sep=',')  # foo,3,baz

なんてことが出来ます。
さらに、

from functools import partial
p = partial(print, file=open('/path/to/foo', 'w'))

のようにして、出力ストリームをbindしたり、いろいろ便利になります。
なので、自分用プログラムではpy3kを常用・・・までは行かなくても、from __future__ import print_function, unicode_literal くらいは常用しています。

副作用を持ったプロシジャが値を返してくれると、便利なときは便利だけど、「変更した結果を新しいオブジェクトとして返している」のか「自分自身を変更して自分自身を返している」のか判りにくくなってしまいます。

このあたりは、式をどんどん繋げていくよりも、要所要所で文に分けるのが Pythonic と判断されているので、py3kでも変わりません。ただし、式を要所要所で切ってもタイプ数はそれほど増えず、後で読みやすくなる効果もあるので、慣れると欠点と思わなくなります。