Что такое форматирование строк
Форматирование строк — это способ вставки значений переменных или результатов выражений внутрь строки. Вместо того чтобы склеивать части текста вручную через +, мы используем шаблон, в который подставляются нужные значения.
Например, вместо громоздкой конкатенации:
name = "Alice"
age = 30
# плохо: конкатенация и приведение типов
print("My name is " + name + " and I am " + str(age) + " years old.")
Можно написать короче и понятнее:
print(f"My name is {name} and I am {age} years old.")
C-style форматирование
С-style форматирование в Python использует оператор %. Это один из первых способов форматирования, унаследованный от языка C. Сегодня он считается устаревшим, но вы можете встретить его в старых проектах.
Основные спецификаторы
| Спецификатор | Описание | Пример |
|---|---|---|
%s | Строка (или любой объект, преобразуемый в строку) | "%s" % "hello" |
%d | Целое число | "%d" % 42 |
%f | Число с плавающей точкой | "%f" % 3.14 |
%.2f | Float с двумя знаками после запятой | "%.2f" % 3.14159 |
name = "Alice"
age = 30
pi = 3.14159
print("My name is %s and I am %d years old." % (name, age))
print("Pi ≈ %.2f" % pi)
%s преобразует число в строку автоматически, но %d не может принять строку — будет TypeError.
Метод str.format()
Метод format() появился в Python 2.6/3.0 и стал более гибкой заменой C-style. Плейсхолдеры {} внутри строки заменяются переданными значениями.
Позиционные аргументы
name = "Alice"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
Именованные аргументы
print("My name is {name} and I am {age} years old.".format(name="Bob", age=25))
Имена можно использовать несколько раз, что удобно для повторяющихся значений.
Индексы аргументов
print("Her name is {0} and she is {1} years old. {0} loves Python.".format("Anna", 28))
Комбинирование позиционных и именованных аргументов
print("The {0} is {color}.".format("sky", color="blue"))
f-strings
f-strings (formatted string literals) появились в Python 3.6 и сегодня являются рекомендуемым способом форматирования. Перед строкой ставится префикс f, а внутри фигурных скобок можно писать переменные, выражения и даже вызовы функций.
name = "Alice"
age = 25
x, y = 10, 20
text = f"My name is {name} and I am {age} years old."
print(text)
print(f"The sum of {x} and {y} is {x + y}.")
word = "Python"
print(f"The length of '{word}' is {len(word)} and upper is {word.upper()}.")
- Читаемость: переменные находятся прямо в строке.
- Производительность: f-strings работают быстрее
%иformat(). - Гибкость: внутри
{}можно использовать любые выражения.
{x=} в f-strings появился в Python 3.8. Он выводит имя переменной и её значение: print(f"{x=}") → x=10.
Форматирование чисел
Метод format() и f-strings поддерживают единый мини-язык форматирования. После двоеточия в фигурных скобках указывается спецификатор.
Округление float
pi = 3.14159
print(f"Pi ≈ {pi:.2f}") # 3.14
print("Pi ≈ {:.2f}".format(pi)) # 3.14
Разделители тысяч
large = 1234567890
print(f"{large:,}") # 1,234,567,890
Выравнивание и ширина поля
| Спецификатор | Значение |
|---|---|
< | По левому краю |
> | По правому краю |
^ | По центру |
print(f"start_{'text':>10}_end") # start_ text_end
print(f"start_{'text':<10}_end") # start_text _end
print(f"start_{'text':^10}_end") # start_ text _end
Заполнение символами
number = 40
print(f"{number:0>5}") # 00040
print(f"{'Python':_^10}") # __Python__
Методы выравнивания строк
Кроме форматирования через :, у строк есть методы ljust(), rjust() и center(). Они возвращают новую строку заданной ширины, дополненную символами с нужной стороны.
text = "Python"
print(text.ljust(15, '-')) # Python---------
print(text.rjust(15, '-')) # ---------Python
print(text.center(15, '-')) # -----Python----
format() полезен, когда шаблон строки и данные разнесены по разным частям программы.