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([72, 101, 108, 108, 111])
и индексация дает вам обратно целые числа (но нарезка производит новое bytesзначение, для приведенного выше примера, value[0]дает вам 72, но value[:1]это , b'H'как 72 является точкой ASCII код буквы H ).
bytesбинарные данные модели , включая закодированный текст . Если ваше bytesзначение действительно содержит текст, вам необходимо сначала его декодировать, используя правильный кодек. Если данные закодированы как UTF-8, например, вы можете получить strзначение Unicode с помощью:
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, так и на Python 3.
bytesобъекты неизменяемы, как и strстроки. Используйте bytearray()объект, если вам нужно иметь изменяемое значение байтов.