Подтвердить что ты не робот

Тип байтов в python 2.7 и PEP-358

В соответствии с PEP 358 объект байтов используется для хранения изменчивой последовательности байтов (0-255), повышение, если это не так.

Однако мой python 2.7 говорит иначе

>>> bytes([1,2,3])
'[1, 2, 3]'
>>> bytes([280])
'[280]'
>>> bytes is str
True
>>> bytes
<type 'str'>

Кто-нибудь знает, почему PEP объявлен Final, но реализация не соответствует?

4b9b3361

Ответ 1

Тип bytes был введен в Python 3, но то, что обсуждалось в PEP, является изменяемой последовательностью (bytes является неизменяемой), которая была введена в Python 2.6 под названием bytearray.

Очевидно, что PEP не был реализован, как указано (и он говорит, что он частично был заменен PEP 3137), но я думаю, что это только вопрос о переименовании вещей, а не недостающие функции. В Python 2 bytes является просто псевдонимом для str, чтобы помочь прямой совместимости, и поэтому здесь есть красная селедка.

Пример использования bytearray:

>>> a = bytearray([1,2,3])
>>> a[0] = 5
>>> a
bytearray(b'\x05\x02\x03')

Ответ 2

Новый bytes тип 3.x только. Встроенный 2.x bytes - это просто псевдоним типа str. В 2.x нет нового типа bytes; Просто новый синтаксис псевдонима и литерала для str.

Здесь фрагмент документации, который все любят:

Python 2.6 добавляет bytes как синоним для тип str, а также поддерживает b''.

2.6 str отличается от 3.0s байт типа по-разному; наиболее заметно, конструктор полностью другой. В версии 3.0, bytes([65, 66, 67])имеет длину 3 элемента, содержащий байты, представляющие ABC; в 2.6, bytes([65, 66, 67]) возвращает 12-байтовая строка, представляющая str()списка.

Основное использование bytes в 2.6 будет писать тесты типа объекта, такие как как isinstance(x, bytes). Это будет помогите конвертеру 2to3, который не подходит указать, должен ли код 2.x называть строки содержать либо символы, либо 8-битные байт; теперь вы можете использовать либо bytes, либо str, чтобы представить ваше намерение точно, и полученный код будет также корректны в Python 3.0.

Ответ 3

bytes объекты действительно существуют в Python 3.x. bytes является псевдонимом для str в Python 2.7. Он существует, чтобы помочь писать переносимый код между Python 2 и 3.