我正在测试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
代码相同,但功能更快。
为什么会这样?
答案 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中全局命名空间访问速度与本地命名空间访问速度的差异来解释。