- bytearray и bytes в Python
- Параметры
- Пример 1: массив байтов из строки
- Пример 2: массив байтов заданного целого размера
- Пример 3: из повторяемого списка
- Пример 1: преобразование строки в байты
- Пример 2: создать байт заданного целого размера
- Пример 3: преобразование итеративного списка
- Функция bytes() в Python
- Синтаксис
- Без аргументов
- С исходной строкой
- С исходным целым числом
- С итеративным источником
bytearray и bytes в Python
Метод bytearray() в Python возвращает объект bytearray, который представляет собой массив заданных байтов.
bytearray([source[, encoding[, errors]]])
Метод bytearray() возвращает объект bytearray, который представляет собой изменяемую (можно изменять) последовательность целых чисел в диапазоне 0
Если вам нужна неизменная версия, используйте метод bytes().
Параметры
bytearray() принимает три необязательных параметра:
- источник (необязательно) — источник для инициализации массива байтов.
- кодировка (необязательно) — если источником является строка, кодировка строки.
- ошибки (необязательно) — если источником является строка, действие, которое нужно предпринять при сбое преобразования кодировки (Подробнее: Кодировка строки)
Параметр источника можно использовать для инициализации массива байтов следующими способами:
Тип | Описание |
---|---|
Строка | Преобразует строку в байты с помощью str.encode(). Также необходимо указать кодировку и, при необходимости, ошибки. |
Целое число | Создает массив заданного размера, все инициализированные нулевым значением. |
Объект | Буфер объекта только для чтения будет использоваться для инициализации массива байтов. |
Итерабельный | Создает массив размером, равным количеству итераций, и инициализируется повторяющимися элементами. Должен быть итерируемым целыми числами от 0 |
Нет источника (аргументы) | Создает массив размером 0. |
Метод bytearray() возвращает массив байтов заданного размера и значений инициализации.
Пример 1: массив байтов из строки
string = "Python is interesting." # string with encoding 'utf-8' arr = bytearray(string, 'utf-8') print(arr)
bytearray(b'Python is interesting.')
Пример 2: массив байтов заданного целого размера
size = 5 arr = bytearray(size) print(arr)
bytearray(b'\x00\x00\x00\x00\x00')
Пример 3: из повторяемого списка
rList = [1, 2, 3, 4, 5] arr = bytearray(rList) print(arr)
bytearray(b'\x01\x02\x03\x04\x05')
Метод bytes() возвращает неизменяемый объект байтов, инициализированный заданным размером и данными.
bytes([source[, encoding[, errors]]])
bytes() возвращает объект байтов, который представляет собой неизменяемую (не может быть изменена) последовательность целых чисел в диапазоне 0
Если вы хотите использовать изменяемую версию, используйте метод bytearray().
bytes() принимает три необязательных параметра:
- источник (необязательно) — источник для инициализации массива байтов.
- кодировка (необязательно) — если источником является строка, кодировка строки.
- ошибки (необязательно) — если источником является строка, действие, которое нужно предпринять при сбое преобразования кодировки.
Параметр источника можно использовать для инициализации массива байтов следующими способами:
Тип | Описание |
---|---|
Строка | Преобразует строку в байты с помощью str.encode(). Также необходимо указать кодировку и, при необходимости, ошибки. |
Целое число | Создает массив заданного размера, все инициализированные нулевым значением |
Объект | Буфер объекта только для чтения будет использоваться для инициализации массива байтов. |
Итерабельный | Создает массив размером, равным количеству итераций, и инициализируется повторяющимися элементами. Должен быть итерируемым целыми числами от 0 |
Нет источника (аргументы) | Создает массив размером 0 |
Метод bytes() возвращает объект байтов заданного размера и значений инициализации.
Пример 1: преобразование строки в байты
string = "Python is interesting." # string with encoding 'utf-8' arr = bytes(string, 'utf-8') print(arr)
Пример 2: создать байт заданного целого размера
size = 5 arr = bytes(size) print(arr)
Пример 3: преобразование итеративного списка
rList = [1, 2, 3, 4, 5] arr = bytes(rList) print(arr)
Функция bytes() в Python
Python bytes() — встроенная функция, которая возвращает объект байтов, который представляет собой неизменяемую последовательность целых чисел в диапазоне 0
Синтаксис
Принимает три необязательных параметра, а именно:
- source -> Источник, который инициализирует массив байтов
- encoding -> Кодировка source строки (может быть UTF-8 и т. д.).
- errors -> Поведение функции при сбое кодирования исходной строки.
byte_array = bytes(source, encoding, errors)
Поскольку все три аргумента являются необязательными, мы можем передать пустую строку, чтобы сгенерировать пустой массив байтов (массив байтов размера 0).
В зависимости от типа source параметра будет инициализирован соответствующий массив байтов.
- Если source является строка, Python bytes() преобразует строку в байты с помощью str.encode() . Следовательно, мы также должны предоставить кодировку и, возможно, ошибки, поскольку encode() используется для обработки строки.
- Если source является целым числом, bytes() создаст массив заданного целочисленного размера, все инициализированные значением NULL.
- Если source относится к классу Object , буфер Object , доступный только для чтения, будет использоваться для инициализации массива байтов.
- Если source является итерируемым, он должен быть итеративным целых чисел в диапазоне 0
Если source — None , это приведет к TypeError , поскольку он не может преобразовать объект None в массив байтов.
Чтобы лучше понять функцию, давайте рассмотрим несколько примеров.
Без аргументов
b = bytes() print(b) c = bytes(None) print(c)
b'' TypeError: cannot convert 'NoneType' object to bytes
С исходной строкой
Любая строка, предоставленная без кодировки, вызовет TypeError .
Точно так же попытка изменить объект bytes также приведет к тому же исключению, поскольку он неизменен по своей природе.
try: a = bytes('Hello from AskPython') except TypeError: print('We need to specify string encoding always!') b = bytes('Hello from AskPython', 'UTF-8') print(type(b), b) try: b[0] = 10 except TypeError: print('byte objects are immutable!')
We need to specify string encoding always! b'Hello from AskPython' byte objects are immutable!
С исходным целым числом
Целое число инициализирует это количество объектов байтовых элементов в массиве.
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Как видите, объект bytes представляет собой инициализированный нулевым массивом, состоящий из 10 элементов.
С итеративным источником
Это инициализирует массив с len(iterable) числом элементов, каждый из которых имеет значение, равное соответствующему элементу на итерируемом.
Доступ к значениям байтовых массивов можно получить с помощью обычной итерации, но их нельзя изменить, поскольку они неизменяемы.
a = bytes([1, 2, 3]) print(type(a), a) print('Length =', len(a)) # To access the byte array values, we can iterate through it! for byte_obj in a: print(byte_object)
b'\x01\x02\x03' Length = 3 1 2 3
Все остальное на Iterable приведет к TypeError
>>> a = bytes([1, 2, 3, 'Hi']) Traceback (most recent call last): File "", line 1, in TypeError: 'str' object cannot be interpreted as an integer