web-dev-qa-db-ja.com

utf8でエンコードされたバイト文字列のunicode()とstr.decode()(python 2.x)

unicode(somestring, 'utf8')ではなくsomestring.decode('utf8')を好む理由はありますか?

私の唯一の考えは、.decode()はバインドされたメソッドであるため、pythonはより効率的に解決できる可能性がありますが、間違っている場合は修正してください。

28
ʞɔıu

ベンチマークは簡単です。

_>>> from timeit import Timer
>>> ts = Timer("s.decode('utf-8')", "s = 'ééé'")
>>> ts.timeit()
8.9185450077056885
>>> tu = Timer("unicode(s, 'utf-8')", "s = 'ééé'") 
>>> tu.timeit()
2.7656929492950439
>>> 
_

明らかに、unicode()の方が高速です。

FWIW、メソッドが速くなるという印象をどこで得るかはわかりません-それはまったく逆です。

23

unicodeタイプはPython 3.0には存在しませんが、'something'.decode(...)はまだ有効であるため、text = b'binarydata'.decode(encoding)をお勧めします。

22
dF.