Что означает префикс 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.