Сообщить об ошибке.

Функция printf байтовых строк в Python

Форматирование байтовых строк

Примечание.
Операции форматирования, описанные здесь, демонстрируют различные причуды, которые приводят к ряду распространенных ошибок, таких как неправильное отображение кортежей и словарей.

Байтовые объекты bytes/bytearray имеют одну уникальную встроенную операцию: оператор '%', оператор называется по модулю. Это оператор также известен как оператор форматирования байтов или интерполяции. При заданном format % values (где format - это байтовая строка) спецификации преобразования % в формате заменяются нулем или более элементов значений. Этот эффект аналогичен использованию sprintf() в языке C.

Если формат требует одного аргумента, значение может быть одним объектом, не являющимся кортежем, в противном случае значения должны быть кортежем с точно заданным числом элементов объекта format или одним объектом сопоставления, например словарем.

Спецификатор преобразования содержит два или более символов и содержит следующие компоненты, которые должны выполняться в следующем порядке:

  1. Символ '%', который отмечает начало спецификатора.
  2. Ключ сопоставления (необязательно), состоящий из заключенной в скобки последовательности символов, например (somename).
  3. Флаги преобразования (необязательно), которые влияют на результат некоторых типов преобразования.
  4. Минимальная ширина поля (необязательно). Если указано как '*' - звездочка, фактическая ширина считывается из следующего элемента кортежа в значениях и объект для преобразования следует после минимальной ширины поля и необязательной точности.
  5. Точность (необязательно), задается как '.' точка, за которой следует точность. Если указано как '*' - звездочка, фактическая точность считывается из следующего элемента кортежа в значениях, а значение для преобразования следует после точности.
  6. Модификатор длины (необязательно).
  7. Тип конверсии.

Когда правильным аргументом является словарь или другой тип отображения, тогда форматы в байтовой строке должны включать заключенный в скобки ключ отображения в этот словарь, вставленный сразу после символа '%'.
Например:

>>> print(b'%(language)s has %(number)03d quote types.' %
...       {b'language': b"Python", b"number": 2})
# b'Python has 002 quote types.'

В этом случае никакие спецификаторы '*' не могут появляться в формате, поскольку они требуют последовательного списка параметров.

Символы флага конверсии:

  • '#' - Преобразование значения будет использовать "альтернативную форму".
  • '0' - Преобразование будет дополнено нулями для числовых значений.
  • '-' - Преобразованное значение корректируется слева, отменяет '0' преобразование, если заданы оба.
  • ' ' - пробел. Пробел должен быть оставлен перед положительным числом или пустой строкой, полученным в результате преобразования со знаком.
  • '+' - Знак '+' или '-' будет предшествовать преобразованию, заменяет флаг "пробел".

Может присутствовать модификатор длины 'h', 'l' или 'L', но он игнорируется, так как он не нужен для Python - например %ld, идентичен %d.

Типы конверсии:

  • 'd' - Десятичное число со знаком
  • 'i' - Десятичное число со знаком
  • 'o' - Восьмеричное значение со знаком.
    • Альтернативная форма вызывает вставку восьмеричного спецификатора '0o' перед первой цифрой.
  • 'u' - Устаревший тип - он идентичен 'd'.
  • 'x' или 'X' - Подписанный шестнадцатеричный.
    • Альтернативная форма приводит к тому, что перед первой цифрой вставляется начальная буква '0x' или '0X'.
  • 'e' или 'E' - Экспоненциальный формат с плавающей запятой.
    • Альтернативная форма приводит к тому, что результат всегда содержит десятичную точку, даже если за ней нет цифр.
  • 'f' или 'F'- Десятичный формат с плавающей точкой.
    • Альтернативная форма приводит к тому, что результат всегда содержит десятичную точку, даже если за ней нет цифр.
  • 'g' или 'G' - Формат с плавающей точкой.
    • Использует экспоненциальный формат в нижнем регистре, если показатель степени меньше -4 или не меньше точности, в противном случае используется десятичный формат.
    • Альтернативная форма приводит к тому, что результат всегда содержит десятичную точку, а завершающие нули не удаляются, как это было бы в противном случае.
    • Точность определяет количество значащих цифр до и после десятичной точки и по умолчанию равна 6.
  • 'c' - Отдельный байт, принимает целочисленные или однобайтовые объекты.
  • 'b' - Байты, любой объект, который следует за буферным протоколом или имеет __bytes__().
    • Если точность равна N, вывод усекается до N символов.
  • 's' - является псевдонимом для 'b' и должен использоваться только для основ кода.
  • 'a' - Байты, преобразует любой объект Python, используя repr(obj).encode('ascii','backslashreplace').
  • 'r' - является псевдонимом для 'a' и должен использоваться только для основ кода.
  • '%' - Никакой аргумент не преобразуется, в результате получается '%' символ.