байты против bytearray в Python 2.6 и 3
я экспериментирую с bytes
vs bytearray
в Python 2.6. Я не понимаю причины некоторых различий.
A bytes
итератор возвращает строки:
for i in bytes(b"hi"):
print(type(i))
выдает:
<type 'str'>
<type 'str'>
но bytearray
итератор возвращает int
s:
for i in bytearray(b"hi"):
print(type(i))
выдает:
<type 'int'>
<type 'int'>
почему разница?
Я хотел бы написать код, который будет хорошо переводиться на Python 3. Итак, ситуация такая же в Python 3?
3 ответов
в Python 2.6 байт - это просто псевдоним для str.
Этот "псевдо-тип" был введен [частично] для подготовки программ [и программистов!] для преобразования / совместимости с Python 3.0, где существует строгое различие семантики и использования для str (которые систематически unicode) и байтов (которые являются массивами октетов, для хранения данных, но не текста)
аналогично префикс b для строковых литералов неэффективен в 2.6, но он является полезным маркером в программа, которая явно указывает на намерение программиста иметь строку как строку данных, а не текстовую строку. Эта информация может быть использована конвертером 2to3 или аналогичными утилитами, когда программа портирована на Py3k.
вы можете проверить это поэтому вопрос для получения дополнительной информации.
Я не уверен, с какой версии, но bytes
на самом деле str
, который вы можете увидеть, если вы делаете type(bytes(b"hi"))
-><type 'str'>
.
bytearray
- это изменяемый массив байтов, один конструктор которого принимает строку.
я попробовал его на Python 3.0.
в Python 3.0, а bytes
итератор возвращает int
s, а не строки, как Python 2.6:
for i in bytes(b"hi"):
print(type(i))
выдает:
<class 'int'>
<class 'int'>
A bytearray
итератор и возвращает class 'int'
s.