有没有更有效的方法将0..255(在C uint8中)范围内的整数转换为1字节?

x = 100
x.to_bytes(1, "big")

推荐答案

对单个整数更有效的方法?大概不会吧.

以下是常见的几种方法的比较:

python -m timeit -s "import struct" "struct.pack('<B', 100)"
2000000 loops, best of 5: 101 nsec per loop
python -m timeit "(100).to_bytes(1)"                     
5000000 loops, best of 5: 81.1 nsec per loop
python -m timeit "bytes([100])"     
2000000 loops, best of 5: 199 nsec per loop

如果你说的是倍数,bytes([integers])可能是最有效的.

对于一些过早的优化,您可以缓存函数,这将使您获得几纳秒的时间:

python -m timeit -s "tb = int.to_bytes" "tb(100,1)" 
5000000 loops, best of 5: 78.6 nsec per loop

如果您想要尽可能高效,它可能会使用元组:

python -m timeit -s "b=tuple(map(int.to_bytes, range(256)))" "b[100]"
10000000 loops, best of 5: 20.9 nsec per loop

但就我个人而言,我觉得这很恶心.

Python-3.x相关问答推荐

IPython似乎已安装但无法运行

使用具有相同索引的多次出现的索引列表更新NumPy数组

被多个\n拆分并保留

如何将多个字典合并到一个列中,并为不同的行使用相同的键

不同的焦点顺序和堆叠顺序 tkinter

如何将函数映射到所有命名元组的元素?

Einsum 对于张量乘法很慢

Snakemake 'run' 指令不产生错误信息

通过附加/包含多个列表来创建 nDimensional 列表

SMTP 库 Python3:不太安全的应用程序访问

Semaphore信号量 Python 的工作原理

从 yahoo Finance python 一次下载多只股票

具有函数值的 Python 3 枚举

Python - 使用 OpenCV 将字节图像转换为 NumPy 数组

'~'(波浪号)运算符在 Python 中的应用

如何在 Spyder 控制台中使用变量执行 Python 3.3 脚本?

asyncio.Semaphore RuntimeError: Task got Future 附加到不同的循环

if 语句中冒号的语法错误

是否可以在每个路由的基础上限制 Flask POST 数据大小?

哪个更有效:Python 文档字符串还是类型提示?