python struct pack加速内部功能

时间:2014-04-15 14:20:22

标签: python serialization

我正在测试python的struct pack / unpack性能,并注意如果放入函数中它会加速:

import time
import struct
from io import BytesIO

def pack(b):
    for i in range(10000000):
        b.write(struct.pack('!i', i))

b = BytesIO()
start = time.time()
pack(b)
end = time.time()
print(end - start)

b2 = BytesIO()
start = time.time()
for i in range(10000000):
    b2.write(struct.pack('!i', i))
end = time.time()
print(end - start)

运行此功能

2.639040946960449
3.0683419704437256

代码相同,但功能更快。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

函数内部的循环比全局级别的循环更快:

from timeit import default_timer as timer

N = 10000000

def f():
    for i in range(N):
        pass

start = timer()
for i in range(N):
    pass
print("global %.2f" % (timer() - start,))

start = timer()
f()
print("function %.2f" % (timer() - start,))

输出:

global 0.71
function 0.40

可以通过CPython中全局命名空间访问速度与本地命名空间访问速度的差异来解释。