Форматирование строк: f-строки, .format() и %
Зачем нужно форматирование строк? 🤔
Представь ситуацию: ты пишешь программу, которая приветствует пользователя по имени и сообщает его баланс. Без форматирования это выглядело бы так:
name = "Анна"
balance = 1234.56
print("Привет, " + name + "! Твой баланс: " + str(balance) + " руб.")
Громоздко, правда? Форматирование строк делает код чище, а жизнь — проще! В Python есть три основных способа: %, .format() и f-строки. Разберём каждый!
Старый добрый % (стиль printf)
Этот метод пришёл из языка C и знаком многим программистам.
# Базовый пример
name = "Максим"
print("Привет, %s!" % name) # %s - строка
# Несколько переменных
price = 99.99
quantity = 3
print("Цена: %f руб., Количество: %d" % (price, quantity)) # %f - float, %d - int
Спецификаторы формата:
%s— строка%d— целое число%f— дробное число (можно указать точность:%.2f)
Плюсы:
- Простота для базовых случаев
- Знакомый синтаксис для тех, кто работал с C
Минусы:
- Не самый читаемый код при множестве переменных
- Ограниченные возможности
Метод .format() — золотая середина ️
Появился в Python 2.6 и стал стандартом на многие годы.
# Простой пример
username = "Ольга"
print("Добро пожаловать, {}!".format(username))
# Позиционные аргументы
item = "кофе"
cost = 150
print("{} стоит {} руб.".format(item, cost))
# Именованные аргументы
print("Имя: {name}, Возраст: {age}".format(name="Данил", age=25))
# Форматирование чисел
pi = 3.14159265
print("Число π: {:.2f}".format(pi)) # Округление до 2 знаков
Фишки:
- Можно повторять аргументы: {0} {0} {1}.format("A", "B") → "A A B"
- Выравнивание текста: {:>10} (вправо), {:<10} (влево), {:^10} (по центру)
- Работа со словарями: "Имя: {data[name]}".format(data={"name": "Мария"})
Почему это круто?
Гибкость и читаемость на уровне, которого хватает для большинства задач!
F-строки — новый король форматирования 👑
Появились в Python 3.6 и мгновенно стали фаворитами! Буква f перед строкой включает магию.
# Просто и понятно
user = "Сергей"
coins = 42
print(f"Игрок {user} собрал {coins} монет!")
# Вычисления прямо в строке
a, b = 5, 10
print(f"Сумма: {a + b}") # 15
# Форматирование чисел
temperature = 23.45678
print(f"Температура: {temperature:.1f}°C") # 23.5°C
# Вызов функций
def greet(name):
return f"Привет, {name}!"
print(f"{greet('Кирилл')} Как дела?")
Суперспособности f-строк:
- Максимальная читаемость — переменные прямо в тексте!
- Поддержка любых выражений внутри
{} - Быстрее
.format()и%(да, это важно для производительности!)
Осторожно:
Не используй f-строки для строк, которые могут содержать пользовательский ввод — это риск инъекций кода!
Что выбрать?
- Для нового кода на Python 3.6+ — всегда f-строки! Они читаются как обычный текст.
- Для совместимости с старыми версиями —
.format(). - % — только если поддерживаешь legacy-код или любишь ностальгировать.
# Сравнение всех методов
name = "Данила"
project = "YouTube-канал"
# %
print("Привет, %s! Заходи на %s!" % (name, project))
# .format()
print("Привет, {}! Заходи на {}!".format(name, project))
# f-строка
print(f"Привет, {name}! Заходи на {project}!")
Продвинутые примеры 🚀
Форматирование дат
from datetime import datetime
now = datetime.now()
print(f"Сейчас: {now:%d.%m.%Y %H:%M}") # 25.06.2023 14:30
Работа с отступами
data = {"имя": "Алексей", "профессия": "разработчик"}
print(f"{'Данные пользователя':^30}\n{'-'*30}")
for key, value in data.items():
print(f"{key.upper():<15}: {value}")
Выравнивание столбцов
products = [("Ноутбук", 999.99, 5), ("Мышь", 25.50, 12)]
for name, price, count in products:
print(f"{name:<10} | {price:>8.2f} руб. | {count:03d} шт.")
Итоги 📝
- f-строки — твой лучший друг в Python 3.6+ (быстро, читаемо, мощно)
- .format() — надёжный инструмент для сложных случаев или старых версий
- % — знай, но используй редко
Попробуй все три метода в деле — открой редактор и напиши несколько примеров прямо сейчас! Как говорит Данила Бежин: «Практика — ключ к мастерству в программировании». Его разборы сложных тем можно найти на YouTube: https://www.youtube.com/@DanilaBezhin.