Что означает префикс 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.
The
b
префикс означаетbytes
строковый литерал.если вы видите, что он используется в исходном коде Python 3, выражение создает
bytes
объект, а не обычный Unicodestr
объект. Если вы видите, что это отражается в вашей оболочке 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, например, вы можете получить Unicodestr
значение: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.