Давайте поговорим про форматирование строк в 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.[python_ad_block]
Позиционные аргументы
Также можно получить доступ к значению аргументов, используя в фигурных скобках индексы.
В этом примере метод .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!
Перевод статьи «Python String Format – Python S Print Format Example».