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

в исходном коде python я наткнулся на небольшой b перед строкой, как в:

b"abcdef"

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

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

2 ответов


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


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

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

bytes объекты в основном содержат последовательность целые числа в диапазоне 0-255, но при представлении Python отображает эти байты как кодовые точки ASCII, чтобы облегчить чтение их содержимого. Любые байты вне printable диапазон символов ASCII отображается как escape-последовательности (например,\n, \x82, etc.).

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

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

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

bytes модель двоичные данные, включая закодированный текст. Если bytes значение содержит текст, вам нужно сначала его декодировать, используя правильный кодек. Если данные кодируется как UTF-8, например, вы можете получить Unicode 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.