Unicodeオブジェクトへの変換コスト

unicode(s, enc) より s.decode(enc) が早くて decoder(s)[0] は もっと早いという話を聞いたので試してみた。

#!/usr/bin/env python
# coding: cp932

from timeit import Timer
import codecs

decoder = codecs.getdecoder('cp932')

setup = 'from __main__ import decoder'
print Timer("unicode('日本語', 'cp932')", setup).timeit()
print Timer("'日本語'.decode('cp932')", setup).timeit()
print Timer("decoder('日本語')[0]", setup).timeit()

結果

2.01834758328
1.65165069862
0.97344774266

おぉ、本当だ。
まぁ、これがプログラム中で支配的な項目になるかといえば多分そんなことはないので、好きなやり方でやるのが吉。