python

len が関数になっている理由

http://d.hatena.ne.jp/pashango_p/20090702/1246550203 len()がリストのメソッドでないのも同じ理由です。 オブジェクト指向的に考えれば、リストのメソッドであるべきなのに、わざわざビルトイン関数にしたんです。 「オブジェクト指向的に考えれば、リス…

hg-fixutf8 を改造してみた

hg-fixutf8 は、出力しようとしているutf-8文字列の中に、現在のコードページで出力できない文字が存在した場合、SetOutputCP(65001) して utf-8 をそのまま出力する。 でも、これ、実際にやってみるとコードページを切り替えるときにコンソールの内容が化け…

そんなに Array.join がいいのか

「(ruby|javascript)でstr.join(array)、pythonでlist.join(str)」http://blog.livedoor.jp/dankogai/archives/51226075.html ここではlistを継承したListクラスをこさえて、そこにjoinメソッドを追加しているが、listに直にメソッド追加する方法はないのだ…

','.join() がなぜキモイのか

Ruby厨とPython厨が平行線の議論をしていたので、まとめてみる。 オブジェクト指向的にキモイ? str.join() 処理での登場人物は2人いる。連結文字(区切り文字=separator)、連結される文字列の列だ。 この二つを比べると、「連結される文字列の列」が情報的に…

Windows上での IPython というか Python+readline について

Windows 用 Python に移植された readline は二つある。 ひとつは、 UNC Python Tools の Python readline http://sourceforge.net/project/showfiles.php?group_id=82407&package_id=84552 もうひとつは、 IPython の開発元が開発している PyReadline http:…

PyQt 4.5 リリース

ダウンロードページはこちら。 http://www.riverbankcomputing.co.uk/software/pyqt/download今回から Python 3.0 がサポートされている。

print_function

http://d.hatena.ne.jp/kazkun/20090529/1243560131 他の言語の経験が長いためか、Pythonの面倒なところ、嫌なところはたくさんでてくる。※例えばprintで最後を改行もせず空白も空けない事ができないとか、副作用を持ったプロシジャが値を返してくれないとか…

PyQT 4.5 もうすぐ

Python 3.0 に対応したり、signal/slot周りをPythonicに改良した PyQT 4.5 が早ければ今週末にもリリースされる。 PyQtアプリの開発環境構築〜開発〜配布までをまとめた本でも書けば流行るのかな。

logging.basicConfig() はすべてのログ出力に先立って呼び出す必要がある

logging.basicConfig() はルートロガーがまだ初期化されていない場合に初期化する関数だけど、一度でもログを出力すると自動でルートロガーが初期化されてしまうので basicConfig() は無効になってしまう。 import logging import foo ... if __name__ == '_…

IPython の起動が重くなったら

history のためすぎを疑う。%clear shadow_compress か %clear shadow_nuke かを試すと良い。詳しくは %clear?

Pythonプログラムがメモリを大量に使っているとき

もし想定以上のメモリを Python プログラムが消費しているのであれば、ループの中で循環参照が生まれていることや、回収不能オブジェクト(循環参照なうえに __del__ メソッドが存在するためにgcがどこから循環を切っていいのか判らないオブジェクト)が存在し…

lxml ではなるべく attrib を使わない方が良い

lxml の Element.attrib は、 _Attrib という libxml への Proxy オブジェクトを生成する。この Proxy オブジェクトは、 _Element という Proxy オブジェクトと循環参照になっている。 大規模なxml処理においては、この循環参照によって gc の間にメモリを食…

PyQt で画像を扱う等するプログラムをfreezeするときの注意

"site-packages/PyQt4/plugins" 以下に配置されているファイルはQtのプラグインで、たとえば "plugins/imageformats" 配下に gif やら jpeg やらの codec が入ってる。 PyQtを使うアプリをpy2exeなどでfreezeすると、これらのcodecが利用不可能になり、JPEG…

PyQtのライセンス

http://d.hatena.ne.jp/gunyara-python/20090508/pyqt45_lxml_install_and_acquire_windows_binary 最近LGPL 2.1もライセンスの選択肢に入ったので、もはや避ける理由もないだろう。 Qtのライセンスは4.5から GPL/LGPL/商用ライセンス になったけど、PyQt4.4…

py2exe では 'mbcs' が使えない

'mbcs' はPython起動時に site.py で適当なcp???へのaliasとして登録される。 py2exeではsite.pyが動かないので'mbcs'は使えない。 py2exe のオプションで、site.pyの代わりになるスクリプトを指定可能だったはずだけど、とりあえず今は社内ツールで使ってた…

Ubuntu Linux で virtualenv した Python を使うと、 meld やら hamster やらが動かない

Ubuntu Jaunty に upgrade した。 幾つかの拡張モジュールが動かなくなったのを期に、常用のPython環境を自分でビルドしたものからvirtualenvに変更。 .bashrc で PATH に追加した。 すると、meldをはじめ幾つかのパッケージが動かなくなった。見てみると、 …

Python 2.6.2 の logging モジュール regression 続き

前回の日記で報告した http://bugs.python.org/issue5768 と同じような問題が FileHandler にもあった。 http://bugs.python.org/issue5170Python 2.6.2 を使っている人は、この問題もFixされてから、 python26-maint から logging パッケージをダウンロード…

Python 2.6.2 リリース && 日本人に取っては割とキツいバグ混入

loggingモジュールがunicodeメッセージをエンコードして出力するか否かを判定する部分の 単純なミスで、unicodeメッセージが出力ストリームの .encoding にエンコードされない。 logging.error(u"ほげ")とかやると文字化けする。 http://bugs.python.org/iss…

new-style class はえー

Python のドキュメントビルドシステムになってる Sphinx + docutils を最適化中。以下はPython の trunk で html ドキュメントをビルドするのにかかった時間 @ Core2 Duo 6300 (1.86GHz) # 最適化前 333.76user 64.36system 6:39.46elapsed 99%CPU (0avgtext…

Pythonの次のバージョン管理システムがMercurialに決定

1年くらい前から、マスターのSubversionとミラーのMercurial/Bazaar/Gitを運用して、Subversionの次のSCMを選んでいたPython。 Gitはもっと前に却下されていたんだけど、とうとう今日、GuidoがMercurialに決定したとMLでアナウンスした。理由は、 Mercurial…

<del datetime="2009-03-29T19:59:21+09:00">mod_wsgi の daemonモードは Linux では sendfile を使えない</del>

ソースコード読んでたら気づいた。 LinuxではUnix domain socketに対してsendfileできないから、daemonモードではsendfile使わないらしい。その場合に 'file_wrapper' 自体を提供していたかどうかは忘れた。environ['wsgi.file_wrapper'] がsendfileを使って…

Py3k はまだ下位互換性を捨てながら進化するべきじゃないか

http://gihyo.jp/dev/serial/01/pythonhacks/0006 format()メソッドはこの演算子を置き換える目的があり追加された機能です。%演算子は,近い将来廃止されることが予告されています。 Python 3.0.1 (r301:69556, Feb 16 2009, 16:14:21) [GCC 4.3.2] on linu…

Python3.0 への移行準備

http://coreblog.org/ats/why-python-30-is-still-deprecated 最も大きな理由。それはCで書かれたエクステンションの3.0対応がけっこう大変だから。 ... データベース接続モジュール,テンプレートエンジンとか,お世話になっているCエクステンションは多い…

php vs Python

php を Python と比べると、月に500円のレンタルサーバーで使えるって事以外に良いところ無いよね。 仕様が非合理的(Webアプリも書くプログラマではなく、プログラムも書くWebページ作成者をターゲットにしてる??) 定期的にたたかれてるのに何でみんな使…

IPython with Qt

Qt4をIPython上から使う場合、Windows上で普通に ipython を起動すると、QApplicationを作った後のシェルの反応が重くなる。ipython -q4thread で起動するとサクサク。他にも、wxPython, Qt3, Tk なんかのスレッドもある。ipythonの起動オプションは見ておく…

Py3k で地味にうれしいこと

クラスが new style class に統一された。 >>> class Foo: ... pass ... >>> type(Foo) <class 'type'> 今までは new style class を使うために、 class Foo(object): と書かないといけなかったので、タイプ数が減った。</class>

Py3k の super

super() について - methaneの日記 についてsuper() は、 super(Type, obj) とするとsuper型のオブジェクトを返し、そのオブジェクトには __getattr__() があって、 super(Type, obj).foo とすると、 mro の Type 以降で一番最初に foo を持っているクラスを…

Python と mix-in

http://d.hatena.ne.jp/w_o/20081205#p3 ←のエントリは、タイトルと本文とTB先に情報が分散していて引用しにくいので、このエントリで書きたい話題をまとめると、 Rubyはmix-inができるので、クラスの継承が必要無いので(親クラスのコンストラクタ呼び出しの…

Python の super のメリットとデメリット

※英語の読める人はこのエントリよりも Python's Super is nifty, but you can't use it を読んで下さいsuper を使うメリットは、コンストラクタのようなクラス階層全体にまたがるメソッドチェーンを、ダイヤモンド型の多重継承を行った場合でも実現できるこ…

Mix-inとか、うっかり防止とか

「あとそういえばMix-inという用語がちゃんとあった」 http://d.hatena.ne.jp/w_o/20081205#p3 これの問題は、「うっかりメソッド追加し忘れたら死亡」という点だろうか。最近ちょっとうっかりすることが多いというか、死亡しすぎな気がする。あと、書かれそ…

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。