Якщо ви подивитеся на документи bytes
, це вказує на bytearray
:
ByteArray ([джерело [, кодування [помилка]]])
Повернути новий масив байтів. Тип байт-масиву - це змінна послідовність цілих чисел у діапазоні 0 <= x <256. Вона має більшість звичайних методів змінних послідовностей, описаних у типах змінних послідовностей, а також більшість методів, якими володіє тип байтів, див. Методи масиву байтів.
Необов’язковий параметр джерела можна використовувати для ініціалізації масиву кількома різними способами:
Якщо це рядок, ви також повинні надати параметри кодування (і необов'язково помилки); ByteArray (), а потім перетворить рядок в байтах, використовуючи str.encode ().
Якщо це ціле число, масив матиме такий розмір і буде ініціалізований нульовими байтами.
Якщо це об'єкт, що відповідає інтерфейсу буфера, для ініціалізації масиву байтів буде використовуватися лише буфер об'єкта для читання.
Якщо він є ітерабельним, він повинен бути ітерабельним цілих чисел у діапазоні 0 <= x <256, які використовуються як початковий вміст масиву.
Без аргументу створюється масив розміром 0.
Так bytes
можна зробити набагато більше, ніж просто кодувати рядок. Це Pythonic, що дозволить вам викликати конструктор будь-якого типу вихідного параметра, який має сенс.
Для кодування рядка, я думаю , що some_string.encode(encoding)
більше , ніж віщі з допомогою конструктора, так як він є найбільш документовано - «взяти цей рядок і кодувати його з цієї кодуванням» є більш ясним , ніж bytes(some_string, encoding)
- немає явного дієслова , коли ви використовуєте конструктор.
Редагувати: я перевірив джерело Python. Якщо передати рядок Юникода з bytes
допомогою CPython, він викликає PyUnicode_AsEncodedString , який є реалізацією encode
; тож ви просто пропускаєте рівень непрямості, якщо називаєте encode
себе.
Також дивіться коментар Сердаліса - unicode_string.encode(encoding)
також більш пітонічний, оскільки його зворотна є byte_string.decode(encoding)
і симетрія приємна.