Интерполяция строк в Python

Интерполяция строк — это процесс подстановки значений переменных в плейсхолдеры строки. Например, если у вас есть шаблон приветствия "Hello {Name of person}, nice to meet you!", вы захотите заменить плейсхолдер имени реальным именем. Этот процесс называется интерполяцией строк.

f-строки

В Python 3.6 был добавлен новый метод интерполяции строк, называемый литеральной интерполяцией строк, и введён новый префикс f. Этот новый способ форматирования строк мощный и простой в использовании. Он предоставляет доступ к встроенным Python-выражениям внутри строковых констант.

Пример 1:

name = 'World'
program = 'Python'
print(f'Hello {name}! This is {program}')

При запуске вывод будет:

Hello World! This is Python

В примере выше префикс f сообщает Python подставить значения двух строковых переменных name и program внутри фигурных скобок {}. Когда мы вызываем print, получаем указанный вывод.

Эта новая интерполяция мощная, поскольку мы можем встраивать произвольные Python-выражения, в том числе делать встроенную арифметику.

Пример 2:

a = 12
b = 3
print(f'12 multiply 3 is {a * b}.')

При запуске вывод:

12 multiply 3 is 36.

Здесь мы выполнили встроенную арифметику, что возможно только этим способом.


%-форматирование

Строки в Python имеют уникальную встроенную операцию, доступную через оператор %. Используя %, можно очень легко выполнять простую интерполяцию строк.

Пример 3:

print("%s %s" %('Hello','World',))

Вывод:

Hello World

Здесь мы использовали два спецификатора формата %s и две строки Hello и World в скобках (). Получили Hello World. Спецификатор %s сообщает Python, куда подставлять значение.

Синтаксис форматирования меняется, если мы хотим сделать несколько подстановок в одной строке, и поскольку оператор % принимает один аргумент, нужно обернуть правую часть в кортеж.

Пример 4:

name = 'world'
program ='python'
print('Hello %s! This is %s.'%(name,program))

Вывод:

Hello world! This is python.

Здесь мы использовали две переменные name и program, обернув их в скобки ().

Также можно ссылаться на подстановки по имени, передав словарь оператору %:

Пример 5:

name = 'world'
program ='python'
print('Hello %(name)s! This is %(program)s.'%{'name': name, 'program': program})

Вывод:

Hello world! This is python.

Это делает строки форматирования удобнее для поддержки и изменения. Не нужно заботиться о порядке передаваемых значений.


Str.format()

В этом форматировании используется функция format() на строковом объекте и фигурные скобки {}; строковый аргумент в format() подставляется вместо {}. Можно использовать format() для простого позиционного форматирования, как и %.

Пример 6:

name = 'world'
print('Hello, {}'.format(name))

Вывод:

Hello,world

Мы использовали {} и format(), чтобы передать name. Значение появилось вместо {}.

Можно ссылаться на подстановки по имени и в любом порядке. Это мощно: позволяет менять порядок отображения, не меняя аргументы.

Пример 7:

name = 'world'
program ='python'
print('Hello {name}!This is {program}.'.format(name=name,program=program))

Вывод:

Hello world!This is python.

Template Strings

Шаблонные строки — более простой и менее мощный механизм интерполяции. Нужно импортировать класс Template из встроенного модуля Python string.

Пример 8:

from string import Template
name = 'world'
program ='python'
new = Template('Hello $name! This is $program.')
print(new.substitute(name= name,program=program))

Вывод:

Hello world! This is python.

Ключевые моменты

Примечание

  1. Метод %-форматирования очень старый и не рекомендуется к использованию, так как снижает читаемость кода.

  2. В методе str.format() строковый объект передаётся в функцию format() для интерполяции.

  3. В методе template создаётся шаблон импортом класса Template из встроенного модуля string.

  4. Литеральная интерполяция строк — мощный метод, простой в использовании и повышающий читаемость кода.

См. также: Python f-строки.