Интерполяция строк в 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.
Ключевые моменты
Примечание
Метод %-форматирования очень старый и не рекомендуется к использованию, так как снижает читаемость кода.
В методе
str.format()строковый объект передаётся в функциюformat()для интерполяции.В методе template создаётся шаблон импортом класса Template из встроенного модуля string.
Литеральная интерполяция строк — мощный метод, простой в использовании и повышающий читаемость кода.
См. также: Python f-строки.