Важно. Операции форматирования, описанные здесь, демонстрируют различные причуды, которые приводят к ряду распространенных ошибок, таких как неправильное отображение кортежей и словарей. Использование более новых форматированных строковых литералов, метода str.format()
или строк шаблона может помочь избежать этих ошибок. Каждая из этих альтернатив обеспечивает свои собственные компромиссы и преимущества простоты, гибкости или расширяемости.
Строки имеют одну уникальную встроенную операцию: оператор %
. Он известен как оператор форматирования строк или интерполяции. При заданном формате 'string' % values
, спецификации преобразований в string
заменяются на ноль или более элементов значений. Этот эффект аналогичен использованию sprintf()
в языке C
.
Спецификатор преобразования содержит два или более символов и содержит следующие компоненты, которые должны выполняться в следующем порядке:
%
, который отмечает начало спецификатора.'*'
- звездочка, фактическая ширина считывается из следующего элемента кортежа в значениях и объект для преобразования следует после минимальной ширины поля и необязательной точности.'.'
- точка, за которой следует точность. Если указано как '*'
- звездочка, фактическая точность считывается из следующего элемента кортежа в значениях, а значение для преобразования следует после точности.Если правым аргументом является словарь или другой тип сопоставления, то форматы в строке должны включать заключенный в скобки ключ сопоставления этому словарю, вставленный сразу после символа %
. Ключ выбирает значение словаря, которое будет отформатировано.
# Применение словаря для форматирования >>> print('%(language)s has %(number)03d quote types.' % {'language': 'Python', 'number': 2}) # Python has 002 quote types. >>> language = 'Python' >>> number = 2 >>> print('%s has %03d quote types.' % (language, number)) # Python has 002 quote types. >>> print('%s has %d quote types.' % (language, number)) # Python has 2 quote types. >>> a = 'Можно' >>> b = 'так' >>> x = '%s сделать %s ...' >>> print(x % (a, b)) # Можно сделать так ...
В этом случае спецификаторы *
- распаковки не могут встречаться в формате, так как они требуют последовательного списка параметров.
Символами флагов преобразований являются:
'#'
- Преобразование значения будет использовать "альтернативную форму"'0'
- Преобразование будет дополнено нулями для числовых значений.'-'
- Преобразованное значение корректируется слева, отменяет '0'
преобразование, если заданы оба.' '
- пробел. Пробел должен быть оставлен перед положительным числом или пустой строкой, полученным в результате преобразования со знаком.'+'
- Знак, '+'
или '-'
, будет предшествовать преобразованию. Заменяет флаг "пробел".Типы конверсии:
'd'
- Десятичное число со знаком'i'
- Десятичное число со знаком'o'
- Восьмеричное значение со знаком. Вызывает вставку восьмеричного спецификатора '0o'
перед первой цифрой.'u'
- Устаревший тип - он идентичен 'd'
.'x', 'X'
- Шестнадцатеричный формат. Перед первой цифрой вставляется начальная буква '0x'
или '0X'
'e', 'E'
- Экспоненциальный формат с плавающей запятой.'f', 'F'
- Десятичный формат с плавающей точкой. Cодержит десятичную точку, даже если за ней нет цифр.'g', 'G'
- Формат с плавающей точкой. Использует экспоненциальный формат в нижнем регистре, если показатель степени меньше -4
, в противном случае используется десятичный формат. Всегда содержит десятичную точку, а завершающие нули не удаляются.'c'
- Один символ. Принимает целое число или одну строку символов.'r'
- Строка. Преобразует любой объект Python, используя встроенную функцию repr()
. Если точность равна N
, вывод усекается до N
символов.'s'
- Строка. Преобразует любой объект Python, используя встроенную класс str()
.'a'
- Строка. Преобразует любой объект Python, используя встроенную функцию ascii()
.'%'
- Никакой аргумент не преобразуется, в результате получается символ '%'
.Поскольку строки Python имеют явную длину, %s
преобразования не предполагают, что '\0'
это конец строки.
Изменено в Python-3.1: %f
преобразования для чисел, абсолютное значение которых превышает 1e50
, больше не заменяются %g
преобразованиями.