Давайте поговорим про форматирование строк в Python. Этот язык предоставляет несколько вариантов форматирования. Мы разберем метод str.format(), f-строки и «шаблонные» строки.
Но для начала давайте посмотрим, что считается «старым способом» форматирования.
Что такое форматирование строк в Python с помощью %?
Раньше форматирование строк происходило при помощи оператора %.
Вот основной синтаксис данного оператора:
"This is a string %s" % "string value goes here"
Вы можете создать строку и использовать %s внутри нее. %s здесь играет роль плейсхолдера. Дальше вы можете написать значок %, а затем – фактическое строковое значение, которое хотите использовать. Это значение в результате вставится на место плейсхолдера.
Вот базовый пример использования форматирования строки с помощью %.
print("Hi, my name is %s" % "Jessica")
# Запустив такую строчку кода, получим следующий результат:
Hi, my name is Jessica
Этот метод часто называют старым, потому что Python 3 представил метод str.format(), а также f-строки.
Что такое метод str.format() в Python?
Вот основной синтаксис данного метода:
"template string {}".format(arguments)
Внутри строки мы можем использовать фигурные скобки {}. Они играют роль плейсхолдеров для аргументов. Аргументы – это значения, которые будут подставлены в строку.
В этом примере мы хотим напечатать "Hello, my name is Jessica. I am a musician turned programmer."
В строке у нас будет всего три пары фигурных скобок. Они выступят в роли плейсхолдеров для значений Jessica, musician и programmer.
"Hello, my name is {}. I am a {} turned {}."
Внутри скобок для str.format() мы будем использовать значения Jessica, musician и programmer следующим образом:
.format("Jessica", "musician", "programmer")
Таким образом, целиком наш код будет выглядеть так:
print("Hello, my name is {}. I am a {} turned {}.".format("Jessica", "musician", "programmer"))
# И наш желаемый результат:
Hello, my name is Jessica. I am a musician turned programmer.
Позиционные аргументы
Также можно получить доступ к значению аргументов, используя в фигурных скобках индексы.
В этом примере метод .format() имеет два аргумента: "trumpet" и "drums".
.format("trumpet", "drums")
Мы можем получить доступ к этим значениям внутри строки, обратившись к ним по индексам. {0} относится к первому аргументу ("trumpet"), а {1} — ко второму ("drums").
"Steve plays {0} and {1}."
Вот наш полный код и предложение, которое будет выведено на экран:
print("Steve plays {0} and {1}.".format("trumpet", "drums"))
# Steve plays trumpet and drums.
Мы можем изменить этот пример и поменять местами номера индексов в строке. Вы заметите, что предложение изменилось, так как расположение аргументов поменялось.
print("Steve plays {1} and {0}.".format("trumpet", "drums"))
# Результат:
Steve plays drums and trumpet.
Именованные аргументы
Эти аргументы состоят из пары «ключ-значение». Мы можем получить доступ к значению аргумента, используя ключ внутри фигурных скобок.
В следующем примере у нас есть два ключа: organization и adjective. Мы пропишем их внутри строки:
"{organization} is {adjective}!"
Метод .format() в качестве аргументов получает пары ключ-значение:
.format(organization="Pythonist", adjective="awesome")
Целиком наш код будет выглядеть следующим образом:
print("{organization} is {adjective}!".format(organization="Pythonist", adjective="awesome"))
# Output:
# Pythonist is awesome!
Как смешивать именованные и позиционные аргументы
В str.format() вы можете использовать и именованные, и позиционные аргументы одновременно.
В этом примере мы собираемся написать небольшой рассказ о поездке в Диснейленд.
Сначала мы создадим несколько переменных для имени, числа, прилагательного и аттракциона Диснейленда.
name = "Sam"
adjective = "amazing"
number = 200
disney_ride = "Space Mountain"
Затем мы создадим нашу строку, используя различные аргументы. Также добавим \n, чтобы компьютер создавал новую строку после каждого предложения.
"I went to {0} with {name}.\nIt was {adjective}.\nWe waited for {hours} hours to ride {ride}."
Внутри скобок в методе str.format() мы присвоим ключам name, adjective, hours и disney_ride в качестве значений наши переменные.
{0} будет иметь значение Disneyland.
.format("Disneyland", name=name, adjective=adjective, hours=number, ride=disney_ride)
Полностью наш код выглядит так:
name = "Sam"
adjective = "amazing"
number = 200
disney_ride = "Space Mountain"
print("I went to {0} with {name}.\nIt was {adjective}.\nWe waited for {hours} hours to ride {ride}."
.format("Disneyland", name=name, adjective=adjective, hours=number, ride=disney_ride))
Запустив его, мы получим следующий результат:
I went to Disneyland with Sam.
It was amazing.
We waited for 200 hours to ride Space Mountain.
Что такое f-строки?
Форматированные строковые литералы (или f-строки) позволяют включать выражения прямо внутри ваших строк. Непосредственно перед строкой вы помещаете f или F. Это сообщает компьютеру, что вы хотите использовать f-строку.
Вот так выглядит основной синтаксис:
variable = "some value"
f"this is a string {variable}"
Вот простой пример, который поможет нам вывести на экран предложение Maria and Jessica have been friends since grade school.
name = "Jessica"
print(f"Maria and {name} have been friends since grade school.")
Если мы вместо строчной f напишем заглавную, то всё будет работать точно так же.
name = "Jessica"
print(F"Maria and {name} have been friends since grade school.")
Результаты последних двух примеров абсолютно идентичны:
Maria and Jessica have been friends since grade school.
Вы также можете использовать f-строку для форматирования данных из словаря.
Давайте рассмотрим следующий пример. У нас есть словарь. В нем представлены лучшие позиции мужских баскетбольных команд колледжей и количество выигранных ими игр из возможных 32.
rankings = {"Gonzaga": 31, "Baylor": 28, "Michigan": 25, "Illinois": 24, "Houston": 21}
При помощи цикла for и словарного метода items() можно просмотреть каждую из пар «ключ-значение» словаря rankings.
for team, score in rankings.items():
Внутри цикла for мы можем использовать f-строку для форматирования выводимых результатов.
Использование двоеточия в {team: 10} и {score: 10d} указывает компьютеру создать поле шириной 10 символов. Так мы получим ровные столбцы для наших данных.
Буква d внутри {score: 10d} обозначает десятичное целое число.
print(f"{team:10} ==> {score:10d}")
Соберем наш код и получим следующую программу:
rankings = {"Gonzaga": 31, "Baylor": 28, "Michigan": 25, "Illinois": 24, "Houston": 21}
for team, score in rankings.items():
print(f"{team:10} ==> {score:10d}")
Теперь давайте запустим её. Вот, что у нас получится:
Gonzaga ==> 31
Baylor ==> 28
Michigan ==> 25
Illinois ==> 24
Houston ==> 21
Что такое «шаблонные» строки?
«Шаблонные» строки – это строки в Python, которые используют плейсхолдеры для реальных значений.
Вот основной синтаксис такой строки:
Template("$placeholder").substitute(placeholder="real value")
Давайте рассмотрим пример, чтобы лучше понять, как это работает.
В этом примере мы хотим напечатать I love to learn with Pythonist!, используя шаблонные строки.
Чтобы их использовать, сначала нужно импортировать класс Template из стандартной библиотеки string.
from string import Template
Затем мы можем использовать класс Template и указать строку внутри скобок. Мы поставим знак доллара $ перед именем. Позже $name заменится реальным значением.
Template("I love to learn with $name!")
Затем мы добавляем .substitute() к шаблону и присваиваем name значение Pythonist.
.substitute(name="Pythonist")
Таким образом, мы получили следующий код:
from string import Template
print(Template("I love to learn with $name!").substitute(name="Pythonist"))
# Результат:
# I love to learn with Pythonist!
Заключение
Форматирование строк в Python можно осуществлять по-разному.
Более старый способ форматирования заключался в использовании оператора %.
"This is a string %s" % "string value goes here"
%s действует как плейсхолдер для реального значения. Вы помещаете реальное значение после оператора %.
Этот метод часто называют старым, потому что Python 3 представил метод str.format() и f-строки.
В методе str.format() вы используете фигурные скобки для плейсхолдеров и круглые — для реальных значений. Этот метод может принимать именованные и позиционные аргументы.
"template string {}".format(arguments)
F-строки позволяют включать выражения в ваши строки. Непосредственно перед строкой вы помещаете f или F, которые сообщают компьютеру, что вы хотите использовать f-строку.
variable = "some value"
f"this is a string {variable}"
Вы также можете использовать шаблонные строки, импортировав класс Template из стандартной библиотеки. Шаблонные строки – это строки Python, которые используют плейсхолдеры для реальных значений.
Template("$placeholder").substitute(placeholder="real value")
Мы надеемся, что эта статья оказалась для вас полезной, и желаем удачи в вашем путешествии в мире Python!