В исходном коде Python я наткнулся на маленькую букву b перед строкой, например:
b"abcdef"
Я знаю о u
префиксе, обозначающем строку в Юникоде, и о r
префиксе для необработанного строкового литерала.
Что означает b
символ и в каком виде исходного кода он полезен, поскольку кажется, что он в точности похож на обычную строку без какого-либо префикса?
python
syntax
python-3.x
byte
Крисс
источник
источник
Ответы:
Это
bytes
литерал Python3 . Этот префикс отсутствует в Python 2.5 и старше (он эквивалентен простой строке 2.x, а обычная строка 3.x эквивалентна литералу сu
префиксом в 2.x). В Python 2.6+ это эквивалентно простой строки, для совместимости с 3.x .источник
b
Префикс обозначаетbytes
строковый литерал .Если вы видите, что оно используется в исходном коде Python 3, выражение создает
bytes
объект , а не обычный объект Unicodestr
. Если вы видите, что это отражено в вашей оболочке Python или как часть списка, dict или другого содержимого контейнера, то вы видитеbytes
объект, представленный с использованием этой нотации.bytes
объекты в основном содержат последовательность целых чисел в диапазоне 0–255, но при представлении Python отображает эти байты в виде кодовых точек ASCII, чтобы облегчить чтение их содержимого. Любые байты за пределами печатаемого диапазона символов ASCII отображаются как escape-последовательности (например\n
,\x82
и т. Д.). И наоборот, вы можете использовать как символы ASCII, так и управляющие последовательности для определения байтовых значений; для значений ASCII используется их числовое значение (например,b'A'
==b'\x41'
)Поскольку
bytes
объект состоит из последовательности целых чисел, вы можете создатьbytes
объект из любой другой последовательности целых чисел со значениями в диапазоне 0–255, например список:и индексация дает вам обратно целые числа (но нарезка производит новое
bytes
значение, для приведенного выше примера,value[0]
дает вам72
, ноvalue[:1]
это ,b'H'
как 72 является точкой ASCII код буквы H ).bytes
бинарные данные модели , включая закодированный текст . Если вашеbytes
значение действительно содержит текст, вам необходимо сначала его декодировать, используя правильный кодек. Если данные закодированы как UTF-8, например, вы можете получитьstr
значение Unicode с помощью:И наоборот, чтобы перейти от текста в
str
объектеbytes
к кодированию . Вам необходимо выбрать кодировку для использования; по умолчанию используется UTF-8, но то, что вам понадобится, сильно зависит от вашего варианта использования:Вы также можете использовать конструктор,
bytes(strvalue, encoding)
чтобы сделать то же самое.Оба метода декодирования и кодирования принимают дополнительный аргумент, чтобы указать, как следует обрабатывать ошибки .
Python 2 версий 2.6 и 2.7 также поддерживает создание строковых литералов с использованием
b'..'
синтаксиса строковых литералов, чтобы упростить код, работающий как на Python 2, так и на Python 3.bytes
объекты неизменяемы, как иstr
строки. Используйтеbytearray()
объект, если вам нужно иметь изменяемое значение байтов.источник