Автор оригинала: Frank Hofmann.
Интерполяция строк Python с помощью оператора Percent (%)
Существует несколько различных способов форматирования строк в Python, один из которых выполняется с помощью оператора %
, который известен как оператор форматирования строк (или интерполяции). В этой статье мы покажем вам, как использовать этот оператор для построения строк с шаблонной строкой и переменными, содержащими ваши данные.
Оператор %
Этот способ работы с текстом был поставлен с Python с самого начала, и он также известен как форматирование в стиле C, поскольку он происходит от языка программирования C. Другое описание для него – простое позиционное форматирование .
Оператор %
указывает интерпретатору Python отформатировать строку, используя заданный набор переменных, заключенных в кортеж, следующий за оператором. Очень простой пример этого заключается в следующем:
'%s is smaller than %s' % ('one', 'two')
Интерпретатор Python заменяет первое вхождение %s
в строке заданной строкой “один”, а второе %s
строкой “два”. Эти строки %s
на самом деле являются заполнителями в нашей строке “шаблона”, и они указывают, что строки будут помещены туда.
В качестве первого примера ниже мы продемонстрируем с помощью Python REPL, как печатать строковое значение и значение с плавающей точкой:
>>> print("Mr. %s, the total is %.2f." % ("Jekyll", 15.53)) 'Mr. Jekyll, the total is 15.33.'
Точно так же, как %s
является заполнителем для строк, %f
является заполнителем для чисел с плавающей запятой. “.2” перед f
– это то, что указывает, сколько цифр мы хотим отобразить после десятичной точки.
Это всего лишь два простых примера того, что возможно, и поддерживается гораздо больше типов заполнителей. Вот полный список типов заполнителей более подробно:
%c
Этот заполнитель представляет собой один символ.
>>> print("The character after %c is %c." % ("B", "C")) The character after B is C.
Предоставление более одного символа в качестве переменной здесь вызовет исключение.
%s
Этот заполнитель использует преобразование строк через str()
перед форматированием. Таким образом, здесь можно использовать любое значение, которое может быть преобразовано в строку с помощью str ()
.
>>> place = "New York" >>> print("Welcome to %s!" % place) Welcome to New York!
Здесь у нас есть только один элемент, который будет использоваться в нашем строковом форматировании, и поэтому мы не обязаны заключать элемент в кортеж, как в предыдущих примерах.
%i и %d
Эти заполнители представляют собой знаковое десятичное целое число.
>>> year = 2019 >>> print("%i will be a perfect year." % year) 2019 will be a perfect year.
Поскольку этот заполнитель ожидает десятичную дробь, он будет преобразован в единицу, если вместо нее будет указано значение с плавающей запятой.
%u
Этот заполнитель представляет собой десятичное целое число без знака.
%o
Этот заполнитель представляет собой восьмеричное целое число.
>>> number = 15 >>> print("%i in octal is %o" % (number, number)) 15 in octal is 17
%x
Представляет собой шестнадцатеричное целое число с использованием строчных букв (a-f).
>>> number = 15 >>> print("%i in hex is %02x" % (number, number)) 15 in hex is 0f
Используя префикс “02” в нашем заполнителе, мы говорим Python напечатать двухсимвольную шестнадцатеричную строку.
%X
Представляет собой шестнадцатеричное целое число с использованием прописных букв (A-F).
>>> number = 15 >>> print("%i in hex is %04X" % (number, number)) 15 in hex is 000F
И, как и в предыдущем примере, используя префикс “04” в нашем заполнителе, мы говорим Python напечатать четырехсимвольную шестнадцатеричную строку.
%e
Представляет собой экспоненциальную нотацию со строчной буквой “е”.
%E
Представляет собой экспоненциальную нотацию с заглавной буквой “е”.
%f
Представляет собой вещественное число с плавающей запятой.
>>> price = 15.95 >>> print("the price is %.2f" % price) the price is 15.95
%g
Более короткая версия %f
и %e
.
%G
Более короткая версия %f
и %E
.
Заполнители, показанные выше, позволяют форматировать строки, указывая типы данных в шаблонах. Однако это не единственные особенности оператора интерполяции. В следующем подразделе мы увидим, как мы можем заполнить наши строки пробелами с помощью оператора %
.
Выравнивание выходного сигнала
До сих пор мы только показывали, как форматировать текстовые строки, задавая простые заполнители. С помощью дополнительного числового значения можно определить общее пространство , которое должно быть зарезервировано по обе стороны переменной в выходной строке.
Например, значение %10s
резервирует 10 символов с дополнительным интервалом слева от заполнителя, а значение %-10s
помещает любое дополнительное пространство справа от заполнителя. Один символ заполнения является пробелом и не может быть изменен.
>>> place = "London" >>> print ("%10s is not a place in France" % place) # Pad to the left London is not a place in France >>> print ("%-10s is not a place in France" % place) # Pad to the right London is not a place in France
Работа с числами работает точно так же:
>>> print ("The postcode is %10d." % 25000) # Padding on the left side The postcode is 25000. >>> print ("The postcode is %-10d." % 25000) # Padding on the right side The postcode is 25000 .
Усечение строк и округление чисел является аналогом заполнения. Взгляните на Округление чисел в Python, чтобы узнать больше о ловушках, которые здесь скрываются.
Вывод
В этой статье мы видели, как оператор интерполяции (он же форматирование) является мощным способом форматирования строк, который позволяет указать тип данных, точность с плавающей запятой и даже интервал/заполнение.