我正在测试 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
代码相同,但功能更快。
这是为什么?
最佳答案
函数内部的循环比全局级别的相同循环更快:
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 中全局命名空间与本地命名空间访问速度的差异所致。
关于python struct pack 加速函数内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086500/