【发布时间】:2020-12-11 11:05:22
【问题描述】:
我正在解码大量的小 utf-8 字符串。
最快的解码方法是什么?
【问题讨论】:
-
最快的编码?跑得最快?另请提供一些示例输入和预期输出
我正在解码大量的小 utf-8 字符串。
最快的解码方法是什么?
【问题讨论】:
如果最快是指运行速度最快,那么普通的decode() 字节方法应该可以解决问题。
py -m timeit "b'test'.decode('utf8')"
1000000 loops, best of 5: 215 nsec per loop
py -m timeit "str(b'test', 'utf8')"
1000000 loops, best of 5: 339 nsec per loop
如果您对差异感兴趣,我猜这是因为str() 经历了两次实例创建机制。 str() 开始实例化一个新字符串,因此会产生开销,到达 __new__ 然后转到 PyUnicode_FromEncodedObject。
bytes.decode() 但是直接去同一个PyUnicode_FromEncodedObject,没有事先做任何操作。
【讨论】:
str() 开始创建实例(并产生开销),到达__new__ 然后转到PyUnicode_FromEncodedObject,而bytes.decode() 直接转到PyUnicode_FromEncodedObject。我已经更新了我的答案以反映这一点。