Что означает префикс b перед строкой python?

В исходном коде Python, на который я наткнулся, я увидел маленький b перед строкой, как в:

b"abcdef"

Я знаю о префиксе u , обозначающем строку в Юникоде, и r для префикса необработанного строкового литерала.

Что означает b и в каком виде исходного кода он полезен, поскольку кажется, что он в точности похож на простую строку без префикса?

81 голос | спросил kriss 7 PMpWed, 07 Apr 2010 17:28:36 +040028Wednesday 2010, 17:28:36

2 ответа


0

Это Python3 bytes literal . Этот префикс отсутствует в Python 2.5 и старше (он эквивалентен простой строке 2.x, в то время как простая строка 3.x эквивалентна литералу с u префикс в 2.x). В Python 2.6+ это эквивалентно простой строке для совместимости 3.х .

ответил wRAR 7 PMpWed, 07 Apr 2010 17:34:28 +040034Wednesday 2010, 17:34:28
0

Префикс b означает bytes строковый литерал .

Если вы видите, что он используется в исходном коде Python 3, выражение создает bytes объект , а не обычный Unicode str object . Если вы видите, что это отражено в вашей оболочке Python или как часть списка, dict или другого содержимого контейнера, то вы видите представленный объект bytes используя эту запись.

Объекты

bytes в основном содержат последовательность целых чисел в диапазоне 0-255, но когда они представлены, Python отображает эти байты как кодовые точки ASCII чтобы было легче читать их содержание. Любые байты вне диапазона printable символов ASCII показываются как escape-последовательности (например, \n, \x82 и т. Д.). И наоборот, вы можете использовать как символы ASCII, так и escape-последовательности для определения значений байтов; для значений ASCII используется их числовое значение (например, b'A' == b'\x41')

Поскольку объект bytes состоит из последовательности целых чисел, вы можете создать bytes объект из любой другой последовательности целых чисел со значениями в диапазоне 0-255, например, список:

bytes([72, 101, 108, 108, 111])

и индексация возвращает целые числа (но при нарезке получается новое значение bytes; для приведенного выше примера value[1] дает вам 101, но value[:1] - это b'H', поскольку 72 - это кодовая точка ASCII для заглавной буквы H ).

bytes модель двоичные данные , включая кодированный текст . Если ваше значение bytes содержит текст, вам необходимо сначала декодировать его, используя правильный кодек. Например, если данные кодируются как UTF-8, вы можете получить значение str в Юникоде с помощью:

strvalue = bytesvalue.decode('utf-8')

И наоборот, чтобы перейти от текста в объекте str к bytes вам нужно кодировать . Вы должны выбрать кодировку для использования; по умолчанию используется UTF-8, но то, что вам нужно, сильно зависит от вашего варианта использования:

bytesvalue = strvalue.encode('utf-8')

Вы также можете использовать конструктор bytes(strvalue, encoding), чтобы сделать то же самое.

И методы декодирования, и методы кодирования получают дополнительный аргумент, чтобы указать, как ошибки должны быть обработаны .

Python 2, версии 2.6 и 2.7 также поддерживают создание строковых литералов с использованием строкового литерала b'..', чтобы упростить код, который работает на обоих Python 2 и 3.

bytes объекты являются неизменяемыми, как и str строки есть. Используйте bytearray() object , если вам нужно иметь значение изменяемого байта.

ответил Martijn Pieters 7 J0000006Europe/Moscow 2014, 20:25:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132