bПрефікс позначає bytesстроковий літерал .
Якщо ви бачите, що він використовується у вихідному коді Python 3, вираз створює bytesоб'єкт , а не звичайний об’єкт Unicodestr . Якщо ви бачите, що це лунає у вашій оболонці Python або як частина списку, дикту або іншого вмісту контейнера, ви бачите bytesоб’єкт, представлений за допомогою цієї позначення.
bytesОб'єкти в основному містять послідовність цілих чисел у діапазоні 0-255, але при їх представленні Python відображає ці байти як точки коду ASCII, щоб полегшити зчитування їх вмісту. Будь-які байти за межами друку діапазону ASCII символів відображаються в вигляді керуючих послідовностей (наприклад \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 і 3.
bytesоб'єкти незмінні, як і strрядки. Використовуйте bytearray()об'єкт, якщо вам потрібно мати значення змінних байтів.