Contents
比较:4字节bytearray转化为int
Jacky <jacky.chao.wang@gmail.com> to "python-cn`CPyUG`华蟒用户组(中文Py用户组)" <python-cn@googlegroups.com> cc wileishn@gmail.com, zoom.quiet@gmail.com date Mon, Aug 16, 2010 at 22:10 subject 方案比较:快速将4字节bytearray转化为int
代码
Toggle line numbers
1 import struct
2 import ctypes
3
4 def test_struct(buf, offset):
5 return struct.unpack_from("I", buf, offset)[0]
6
7 def test_ctypes(buf, offset):
8 return ctypes.c_uint32.from_buffer(buf, offset).value
9
10 def test_multi(buf, offset):
11 return buf[offset] + (buf[offset+1] << 8) + (buf[offset+2] << 16) +(buf[offset+3] << 24)
12
13 buf_w = bytearray(5)
14 buf_w[1] = 1
15 buf_r = buffer(buf_w)
16
17 if __name__ == '__main__':
18 import timeit
19 t1 = timeit.Timer("test_struct(buf_r, 1)",
20 "from __main__ import test_struct, buf_r")
21 t2 = timeit.Timer("test_ctypes(buf_w, 1)",
22 "from __main__ import test_ctypes, buf_w")
23 t3 = timeit.Timer("test_multi(buf_w, 1)",
24 "from __main__ import test_multi, buf_w")
25 print t1.timeit(number=1000)
26 print t2.timeit(number=1000)
27 print t3.timeit(number=1000)
结果
number = 10000 0.0081958770752 0.012549161911 0.0112121105194 number = 1000 0.00087308883667 0.00125789642334 0.00110197067261 number = 100 0.0000917911529541 # 9.17911529541e-05 0.000133991241455 0.00011420249939 number = 10 1.69277191162e-05 2.19345092773e-05 1.69277191162e-05 number = 1 1.00135803223e-05 1.00135803223e-05 5.96046447754e-06
为什么运行次数不同,结果也有差异呢?
- 测试环境,ubuntu 10.04,我把number调到100w
反馈
创建 by -- ZoomQuiet [2010-08-17 03:44:33]