提高函数内python struct pack的速度
我正在测试Python中struct的打包和解包性能,发现如果把它放在一个函数里,速度会更快:
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 个回答
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中全局命名空间和局部命名空间访问速度的差异来解释。