← Назад к вопросам

Что такое интерполяция строк?

1.7 Middle🔥 111 комментариев
#Python Core#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Интерполяция строк: встраивание переменных в текст

Интерполяция строк — это процесс встраивания переменных и выражений непосредственно в строку текста. Вместо конкатенации или форматирования, переменные подставляются прямо в строку в момент её создания.

История и версии в Python

В Python было несколько способов интерполяции строк, которые развивались со временем:

1. Конкатенация (старый способ)

name = 'Alice'
age = 30
text = 'Привет, ' + name + '! Тебе ' + str(age) + ' лет.'
print(text)  # Привет, Alice! Тебе 30 лет.

Недостатки:

  • Неудобно и многословно
  • Нужно вручную конвертировать типы
  • Сложно читать при большом количестве переменных

2. Метод % (процент-стиль, Python 2 наследие)

name = 'Alice'
age = 30
text = 'Привет, %s! Тебе %d лет.' % (name, age)
print(text)  # Привет, Alice! Тебе 30 лет.

Спецификаторы:

  • %s — строка
  • %d — целое число
  • %f — число с плавающей точкой
  • %x — шестнадцатеричное число
price = 99.99
quantity = 5
text = 'Цена: %.2f, Количество: %d' % (price, quantity)
print(text)  # Цена: 99.99, Количество: 5

3. Метод .format() (Python 3.0+)

name = 'Alice'
age = 30
text = 'Привет, {}! Тебе {} лет.'.format(name, age)
print(text)  # Привет, Alice! Тебе 30 лет.

# С индексами
text = 'Привет, {0}! Тебе {1} лет.'.format(name, age)

# С именами
text = 'Привет, {name}! Тебе {age} лет.'.format(name=name, age=age)

Форматирование чисел:

price = 99.9876
text = 'Цена: {:.2f}'.format(price)
print(text)  # Цена: 99.99

count = 42
text = 'Количество: {:05d}'.format(count)  # Дополнение нулями
print(text)  # Количество: 00042

4. f-strings (Python 3.6+) — современный стандарт

f-строки (formatted string literals) — это самый удобный и читаемый способ:

name = 'Alice'
age = 30
text = f'Привет, {name}! Тебе {age} лет.'
print(text)  # Привет, Alice! Тебе 30 лет.

f-strings: подробно

Основной синтаксис:

# Простые переменные
first_name = 'John'
last_name = 'Doe'
print(f'{first_name} {last_name}')  # John Doe

# Выражения
x = 10
y = 20
print(f'Сумма: {x + y}')  # Сумма: 30

# Вызовы функций
print(f'Длина: {len("Hello")}')  # Длина: 5

# Условия (тернарный оператор)
age = 17
status = f"Взрослый" if age >= 18 else f"Несовершеннолетний"
print(f"Статус: {status}")  # Статус: Несовершеннолетний

Форматирование в f-strings:

# Числа с плавающей точкой
price = 99.9876
print(f'Цена: {price:.2f}')  # Цена: 99.99

# Целые числа с дополнением нулями
order_id = 42
print(f'Заказ №{order_id:05d}')  # Заказ №00042

# Проценты
ratio = 0.75
print(f'Выполнение: {ratio:.1%}')  # Выполнение: 75.0%

# Выравнивание
name = 'Alice'
print(f'{name:<10}')  # 'Alice     ' (левое)
print(f'{name:>10}')  # '     Alice' (правое)
print(f'{name:^10}')  # '  Alice   ' (центр)

# С разделителем тысяч
amount = 1000000
print(f'Сумма: {amount:,}')  # Сумма: 1,000,000
print(f'Сумма: {amount:_}')  # Сумма: 1_000_000

Практические примеры

Логирование и отладка:

import logging

user_id = 123
action = 'login'
timestamp = '2024-03-23 10:30:45'

logging.info(f'User {user_id} performed {action} at {timestamp}')

# С дополнительной информацией (Python 3.8+)
logger = logging.getLogger(__name__)
logger.debug(f'Processing user {user_id=}, {action=}')
# Output: Processing user user_id=123, action='login'

Работа с данными:

users = [
    {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'},
    {'name': 'Bob', 'age': 25, 'email': 'bob@example.com'},
]

for user in users:
    print(
        f"Имя: {user['name']:15} | "
        f"Возраст: {user['age']:2} | "
        f"Email: {user['email']}"
    )
# Вывод:
# Имя: Alice           | Возраст: 30 | Email: alice@example.com
# Имя: Bob             | Возраст: 25 | Email: bob@example.com

Генерация SQL запросов (ОСТОРОЖНО!):

# ⚠️ ОПАСНО — SQL инъекция!
user_id = "1; DROP TABLE users; --"
query = f"SELECT * FROM users WHERE id = {user_id}"
# Результат: SELECT * FROM users WHERE id = 1; DROP TABLE users; --

# ✅ ПРАВИЛЬНО — используй параметризованные запросы
connection.execute(
    "SELECT * FROM users WHERE id = ?",
    (user_id,)
)

Форматирование вывода таблиц:

data = [
    ('Product', 'Price', 'Quantity'),
    ('Apple', 1.50, 10),
    ('Banana', 0.75, 25),
    ('Orange', 2.00, 15),
]

for row in data:
    name, price, qty = row
    print(f'{name:15} {price:>8.2f} {qty:>8}')

# Вывод:
# Product           1.50        10
# Apple             1.50        10
# Banana            0.75        25
# Orange            2.00        15

Интерполяция в Django шаблонах:

<!-- Django не использует f-strings, но есть похожий синтаксис -->
<div class="user-profile">
    <h1>{{ user.first_name }} {{ user.last_name }}</h1>
    <p>Email: {{ user.email }}</p>
    <p>Дата присоединения: {{ user.date_joined|date:"d.m.Y" }}</p>
</div>

Python 3.12+: отладочные f-strings

x = 10
y = 20
print(f'{x=}, {y=}')  # x=10, y=20

# Эквивалентно:
print(f'x={x}, y={y}')

Сравнение методов

МетодГодПлюсыМинусы
%1990sКомпактенНеудобен, неясны типы
.format()2010ГибкийМногословен
f-strings2016Быстро, ясно, читаемоТолько Python 3.6+

Лучшие практики

  1. Используй f-strings — это современный стандарт
  2. Избегай сложной логики в интерполяции — выполни вычисления раньше
  3. Будь осторожен с пользовательским вводом — избегай SQL инъекций
  4. Форматируй для читаемости — правильное выравнивание и точность
# ❌ Сложно и неудобно
result = f"Результат: {sum([x**2 for x in range(10) if x % 2 == 0]):.2f}"

# ✅ Ясно и читаемо
values = [x**2 for x in range(10) if x % 2 == 0]
total = sum(values)
result = f"Результат: {total:.2f}"

Интерполяция строк — это один из самых частых операций в программировании. f-strings сделали её удобной и эффективной.