Тип байтов в 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, но реализация не соответствует?
Ответы
Ответ 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.