Форматирование строк в Python
В Python 3.6 появились f-строки, и теперь это предпочтительный способ форматирования текста.
В более ранних версиях эту роль выполнял метод format().
F-строки
F-строка позволяет управлять форматированием выбранных частей строки.
Для этого достаточно написать f прямо перед строковым литералом:
Пример
Первая, очень простая f-строка:
Вывод: полная программа на Python
txt = f"Цена составляет 49 долларов"
print(txt)
Заполнители и модификаторы
Значения попадают в f-строку через заполнители, которые записываются как {}. Заполнитель может содержать переменные, операции и функции.
Он также может содержать модификатор, который определяет, как выглядит значение.
Модификатор пишется после двоеточия : с указанием допустимого типа форматирования. Например, .2f означает число с фиксированной точкой и 2 знаками после запятой:
Пример
Поместите переменную price в заполнитель:
Вывод: полная программа на Python
price = 59
txt = f"Цена составляет {price} долларов"
print(txt)
Пример
Выведите ту же цену с 2 знаками после запятой:
Вывод: полная программа на Python
price = 59
txt = f"Цена составляет {price:.2f} долларов"
print(txt)
Заполнители и модификаторы
Значение не обязательно хранить в переменной. Его можно отформатировать прямо в заполнителе:
Пример
Отформатируйте число 95 с 2 знаками после запятой:
Вывод: полная программа на Python
txt = f"Цена составляет {95:.2f} долларов"
print(txt)
Операции в f-строках
Заполнители могут также выполнять операции Python. Это простые вычисления, вычисления с переменными и даже конструкции if...else, как показывают следующие три примера:
Пример
Перемножьте два числа внутри заполнителя и выведите ответ:
Вывод: полная программа на Python
txt = f"Цена составляет {20 * 59} долларов"
print(txt)
Пример
Вычислите цену с учётом налога прямо в заполнителе:
Вывод: полная программа на Python
price = 59
tax = 0.25
txt = f"Цена составляет {price + (price * tax)} долларов"
print(txt)
Пример
Выведите «Expensive», если цена больше 50, и «Cheap» в любом другом случае:
Вывод: полная программа на Python
price = 49
txt = f"Это очень {'дорого' if price>50 else 'дёшево'}"
print(txt)
Вызов функций в f-строках
Заполнитель может также вызывать функции. Подойдут и встроенные методы Python, и функции, которые вы пишете сами:
Пример
Вызовите строковый метод upper(), чтобы перевести значение в заглавные буквы:
Вывод: полная программа на Python
fruit = "apples"
txt = f"Я люблю {fruit.upper()}"
print(txt)
Пример
Напишите собственную функцию, которая переводит футы в метры, а затем вызовите её в заполнителе:
Вывод: полная программа на Python
def myconverter(x):
return x * 0.3048
txt = f"Самолёт летит на высоте {myconverter(30000)} метров"
print(txt)
Другие модификаторы
Ранее в этом уроке модификатор .2f превращал число в значение с фиксированной точкой и 2 знаками после запятой.
Это лишь один из вариантов, другие модификаторы форматируют значения иначе.
Пример
Добавьте запятую как разделитель тысяч:
Вывод: полная программа на Python
price = 59000
txt = f"Цена составляет {price:,} долларов"
print(txt)
Метод format() для строк
До Python 3.6 для форматирования строки нужно было вызывать метод format().
Этот метод по-прежнему работает, хотя f-строки выполняются быстрее и являются рекомендуемым выбором.
Остальные примеры на этой странице используют format(), чтобы вы увидели, как он работает.
Он тоже обозначает заполнители фигурными скобками {}, но его синтаксис немного отличается:
Чтобы управлять преобразованием значения, добавьте параметры между фигурными скобками:
Пример
Поставьте заполнитель в том месте, где должна появиться цена:
Вывод: полная программа на Python
price = 49
txt = "Цена составляет {} долларов"
print(txt.format(price))
txt = "The price is {:.2f} dollars"
Несколько значений
Нужно больше значений? Передайте их все в format():
Затем дайте каждому свой заполнитель:
Пример
Вывод: полная программа на Python
quantity = 3
itemno = 567
price = 49
myorder = "Я хочу {} шт. товара номер {} за {:.2f} долларов."
print(myorder.format(quantity, itemno, price))
Индексы
Число внутри фигурных скобок, например {0}, — это индекс. Он гарантирует, что каждое значение попадёт в нужный заполнитель:
Он также позволяет использовать одно значение несколько раз: просто повторите его индекс:
Пример
Вывод: полная программа на Python
quantity = 3
itemno = 567
price = 49
myorder = "Я хочу {0} шт. товара номер {1} за {2:.2f} долларов."
print(myorder.format(quantity, itemno, price))
Пример
Вывод: полная программа на Python
age = 36
name = "John"
txt = "Его зовут {1}. {1} {0} лет."
print(txt.format(age, name))
Именованные индексы
Заполнители могут иметь и имена. Напишите имя между фигурными скобками, как в {carname}, а затем передайте значение под тем же именем при вызове метода, как в txt.format(carname = "Ford"):
Пример
Вывод: полная программа на Python
myorder = "У меня есть {carname}, это {model}."
print(myorder.format(carname = "Ford", model = "Mustang"))