Вставка значений переменных в строки языка Python

Раздел: Основы Python -> Функции вывода

Способы вставки переменных в строки

Как вставить переменную в строку с минимальным кодом?

Наиболее эффективный способ в современных версиях Python (3.6+) - использование f-строк. Они позволяют прямо внутри строки указывать переменные и даже выражения, заключив их в фигурные скобки.


name = "Анна"
age = 25
result = f"Меня зовут {name}, мне {age} лет."
print(result)
    

Python вывести переменную в строке (вывести значение переменной внутри строки в python)

Меня зовут Анна, мне 25 лет.
    

Перед строкой ставится буква f, затем внутри фигурных скобок указывается имя переменной или выражение (например, {age + 5}). Результатом будет строка с подставленными значениями.

Типичная ошибка: забыть букву f перед строкой. В этом случае фигурные скобки останутся как есть, и переменная не будет интерполирована. Например:


name = "Петр"
text = "Привет, {name}"  # нет f
print(text)
        
Привет, {name}
        

Решение - добавить f перед открывающей кавычкой: f"Привет, {name}".

Также f-строки не работают в Python старше 3.5. В таких версиях нужно использовать другие методы.

Как подставить значения по позициям или именам с помощью format()?

Метод .format() доступен во всех версиях Python. В строке ставятся фигурные скобки, а в метод передаются аргументы. Можно использовать позиционные или именованные аргументы.


city = "Москва"
year = 2025
# Позиционная подстановка
line = "Город: {}, год: {}".format(city, year)
print(line)
# Именованная подстановка
line2 = "Город: {c}, год: {y}".format(c=city, y=year)
print(line2)
    
Город: Москва, год: 2025
Город: Москва, год: 2025
    

Внутри фигурных скобок можно указывать номер аргумента ({0}, {1}) или имя. Это полезно при многократном использовании одного значения.

Ошибка: несоответствие количества аргументов числу фигурных скобок. Если скобок больше, чем передано значений - возникает ошибка IndexError. Решение - передать все необходимые аргументы или использовать именованные.

Также можно путать индексы при позиционной подстановке. Рекомендуется применять именованные аргументы для повышения читаемости.

Как использовать старый способ форматирования через %?

Оператор % (форматирование в стиле C) используется реже, но встречается в старом коде. В строке ставятся заполнители типа %s (строка), %d (целое число), %f (число с плавающей точкой), после которых следует кортеж значений.


product = "ноутбук"
price = 45000.50
text = "Товар: %s, цена: %.2f руб." % (product, price)
print(text)
    
Товар: ноутбук, цена: 45000.50 руб.
    

Спецификаторы %s, %d и другие указывают тип и формат вывода. %.2f означает два знака после запятой.

Распространенная ошибка: несовпадение типа данных. Например, передача строки вместо числа для %d приводит к ошибке TypeError. Решение - явно преобразовывать типы или использовать правильный спецификатор.

Также легко перепутать порядок значений, если их много. Метод .format() или f-строки надёжнее.

Как соединить строки и переменные через конкатенацию?

Самый прямой способ - использовать оператор + для склеивания строк. При этом нестроковые переменные нужно преобразовывать функцией str().


name = "Ольга"
points = 95
result = "Имя: " + name + ", баллы: " + str(points)
print(result)
    
Имя: Ольга, баллы: 95
    

Значение points (число) обернуто в str(), иначе возникнет ошибка сложения строки с числом.

Основные недостатки: громоздкость кода, сложность поддержки при большом количестве переменных, забытое преобразование в str() приводит к TypeError. При конкатенации больших строк снижается производительность, так как каждая операция создает новую строку.

Этот вариант подходит только для простых случаев или когда нужно выполнить дополнительную обработку перед объединением.

Как использовать шаблонные строки из модуля string?

Модуль string содержит класс Template, который позволяет подставлять значения через знак доллара. Это удобно, когда шаблон приходит из внешнего источника (например, файла).


from string import Template

t = Template("Привет, $name! Ваш баланс: $balance")
result = t.substitute(name="Иван", balance="5000")
print(result)
    
Привет, Иван! Ваш баланс: 5000
    

Метод substitute() заменяет все вхождения $name на переданные значения. Если какой-то ключ отсутствует, возникнет ошибка KeyError. Безопасная версия - safe_substitute() - оставляет пустые места без ошибок.

Ошибка: забыть импортировать Template или неправильно задать имена ключей. Также $ внутри строки может конфликтовать - для экранирования используется $$.

Расширенные примеры и нестандартные случаи

F-строки с выражениями и форматированием

Внутри фигурных скобок f-строк можно использовать любые выражения Python, вызывать функции, применять форматирование чисел и дат.

Пример

# Вызов функции
import math
r = 5
area = f"Площадь круга: {math.pi * r ** 2:.2f}"
print(area)

# Форматирование даты
from datetime import datetime
now = datetime.now()
formatted = f"Сегодня {now:%d.%m.%Y}, время {now:%H:%M}"
print(formatted)

# Многострочная f-строка
name = "Елена"
age = 30
multiline = f"""
Имя: {name}
Возраст: {age}
Через год будет: {age + 1}
"""
print(multiline)
Площадь круга: 78.54
Сегодня 23.03.2025, время 14:32

Имя: Елена
Возраст: 30
Через год будет: 31

Тонкость: для вывода фигурных скобок в f-строках их удваивают: {{ и }}. Например, для шаблона словаря:

Пример

d = {'a': 1}
text = f"Словарь: {d} или {{'a': 1}}"
print(text)
Словарь: {'a': 1} или {'a': 1}

Метод format() со словарями и доступом к атрибутам

Внутри фигурных скобок format() можно обращаться к элементам словаря по ключу, а также к атрибутам объектов.

Пример

# Распаковка словаря
person = {"name": "Максим", "lang": "Python"}
text = "Программист: {name}, язык: {lang}".format(**person)
print(text)

# Доступ к атрибутам
class Car:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
car = Car("Toyota", 2020)
msg = "Машина: {0.brand}, год: {0.year}".format(car)
print(msg)
Программист: Максим, язык: Python
Машина: Toyota, год: 2020

Метод format() также поддерживает спецификацию формата после двоеточия: {:>10} (выравнивание вправо), {:.3f} (три знака после запятой) и т.д.

% - форматирование с кортежами и словарями

При использовании % можно передавать кортеж или словарь. Если значений много, словарь делает код понятнее.

Пример

# Словарный стиль
info = {"name": "Дмитрий", "age": 28, "salary": 60000}
text = "Работник: %(name)s, возраст: %(age)d, зарплата: %(salary).0f" % info
print(text)
Работник: Дмитрий, возраст: 28, зарплата: 60000

Спецификатор %(key)s извлекает значение по ключу. Ошибка - указать несуществующий ключ.

Конкатенация с промежуточными операциями

Иногда конкатенацию используют для динамического построения строки в цикле, но для этих целей лучше применять str.join(). Пример с join:

Пример

items = ["яблоко", "банан", "апельсин"]
# Неправильно: result = ""
# for i in items:
#     result += i + ", "
# Правильно:
result = ", ".join(items)
print("Фрукты: " + result)
Фрукты: яблоко, банан, апельсин

Важно: join() работает только со строками. Если в списке числа, их предварительно преобразуют str(n). Конкатенацию строк не стоит использовать в циклах из-за квадратичной сложности.

Template и безопасная подстановка

Класс Template удобен при работе с пользовательским вводом, когда шаблон может содержать символы $ без подстановки.

Пример

from string import Template
# Безопасная замена: если ключа нет, подстановка не происходит
template = Template("$user написал: $$message")
print(template.safe_substitute(user="Алексей", message="Привет"))
print(template.safe_substitute(user="Борис"))  # message не указан
Алексей написал: $message
Борис написал: $message

В первом случае $message подставлен, во втором - остался как есть, так как ключ не был передан.

Вывести значение переменной внутри строки в Python - comments

En
Python вывести переменную в строке (python)