python struct pack 加速函数内部

标签 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

代码相同,但功能更快。

这是为什么?

最佳答案

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

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/

相关文章:

java - 序列化对象解密(和其他字节字段)期间出现 StreamCorruptedException

c# - 从 Newtonsoft.Json 中的序列化中排除类的所有实例

java - 将对象与反序列化对象进行比较

python - 在 python 中使用 sub() 方法

python - 读取csv文件,解析数据,并存储在字典中

c++ - 我序列化了一个C++对象,如何在不知道它是什么类型的情况下为其分配内存?

javascript - 如何将复杂的 JavaScript 对象转换为字符串并返回

python - 在 python 中处理大型数据池

android - 操作系统错误 : [Errno 2] No such file or directory when running systrace.

python - 标签的 BeautifulSoup 值返回 None 即使存在值并且找到了标签 python