Есть ли способ сделать основную математику на байтовых числах с прямым порядком байтов в Python? - PullRequest
0 голосов
/ 16 ноября 2018

В python представьте, что у нас есть целое число, сохраненное как байтовый объект с прямым порядком байтов, и теперь мы хотим добавить его на 1 на каждой итерации. Давайте возьмем следующий код в качестве примера:

import struct
from time import time_ns as time

rng = range(0, int(1e8))
k = len(rng)
_intgr = 25468

intgr = _intgr
start = time()
for i in rng:
    bb   = struct.pack("<L", intgr)
    # do something on bb
    intgr += 1
end = time()
tot = (end-start)
it  = tot/k #Nano Secs
print('Total time(s)       :', tot/1e9, '(s)')
print('Each iteration takes:', it, '(ns)')

Что занимает ~ 400 нс на моем процессоре за итерацию. Мне интересно, если это самый эффективный способ сделать это в Python. Разве нет прямого метода для выполнения базовой математики на байтовых объектах, поэтому мне не нужно вызывать struct.pack на каждой итерации?

Я видел коды, где они выполняют математику, а также побитовую операцию над байтовыми объектами, например, один из следующих:

bb = struct.pack('<L', 100)

cc = bb[0] << 4
dd = bb[0] + 1

Способно ли это улучшить производительность в предыдущем примере кода?

...