Как создать байты или байты заданной длины, заполненные нулями в Python? - PullRequest
34 голосов
/ 08 февраля 2012

Все решения, которые я нашел, были для списков.

Спасибо.

Ответы [ 2 ]

55 голосов
/ 08 февраля 2012

Простой:

bytearray(100)

даст вам 100 нулевых байтов.

9 голосов
/ 31 января 2018

Для bytes можно также использовать буквальную форму b'\0' * 100.

# Python 3.6.4 (64-bit), Windows 10
from timeit import timeit
print(timeit(r'b"\0" * 100'))  # 0.04987576772443264
print(timeit('bytes(100)'))  # 0.1353608166305015

Обновление 1: С постоянным свертыванием в Python 3.7 , литерал от теперь почти в 20 раз быстрее.

Update2: Видимо постоянное складывание имеет предел:

>>> from dis import dis
>>> dis(r'b"\0" * 4096')
  1           0 LOAD_CONST               0 (b'\x00\x00\x00...')
              2 RETURN_VALUE
>>> dis(r'b"\0" * 4097')
  1           0 LOAD_CONST               0 (b'\x00')
              2 LOAD_CONST               1 (4097)
              4 BINARY_MULTIPLY
              6 RETURN_VALUE
...