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


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

b"abcdef"

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

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

2 76

2 ответа:

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

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

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

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

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

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

и индексация возвращает целые числа (но нарезка создает новый bytes значение; например, value[1] дает 101, а value[:1] и 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.