Как добавить переменную в строку в Python

Иногда возникает необходимость включить переменную или нестроковые типы данных в строковый литерал. В этой статье мы рассмотрим четыре способа сделать это.

1. Запятая

Наиболее распространенным способом является разделение строк и переменных запятой, как показано ниже.

>>> name = "John"
>>> age = 16
>>> height = 1.72
>>> print("Name:", name, "; Age:", age, "; Height:", height, "m") 
Name: John ; Age: 16 ; Height: 1.72 m

Это не дает больших возможностей для настройки вывода, но при этом все выглядит хорошо. Также необходимо учитывать, что каждая запятая является пробелом в итоговой строке.

Мы можем сделать лучше.

2. Оператор %

Это старый метод, но он все еще часто встречается. На самом деле, я тоже часто его использую.

>>> print("Name: %s; Age: %d; Height: %fm" % (name, age, height))
Name: John; Age: 16; Height: 1.720000m

Это дает нам большую гибкость, но есть два основных ограничения:

  1. Вы не можете включать такие типы данных, как список, время и т.д.
  2. %s означает строку, %d — int и %f — float. Нельзя путать одно с другим.
>>> print("Name: %s; Age: %d; Height: %dm" % (name, age, height))
Name: John; Age: 16; Height: 1m

В этом примере мы не получили ошибку, поскольку типы данных были конвертируемыми. В результате Python автоматически привел данные к нужному типу.

Однако есть некоторые значения типа float, например, infinity, которые не могут быть преобразованы в int.

>>> import math
>>> math.inf
inf
>>> int(math.inf)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
OverflowError: cannot convert float infinity to integer

>>> print("Infinity %s" % math.inf)
Infinity inf

>>> print("Infinity %f" % math.inf)
Infinity inf

>>> print("Infinity %d" % math.inf)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
OverflowError: cannot convert float infinity to integer

Когда для оператора % имеется более одного аргумента, они должны быть объединены в кортеж. И, наконец, вы можете указать длину числа с плавающей запятой, как показано ниже (точка, за которой следует количество десятичных знаков).

>>> print("Name: %s; Age: %d; Height: %.1fm" % (name, age, height))
Name: John; Age: 16; Height: 1.7m

3. Строковый метод format()

У строк в Python есть метод format(), который позволяет вставить любой тип данных. Он очень похож на оператор %%s или %d или %f, замененными на {}), но лучше.

>>> print("Name: {}; Age: {}; Height: {}m".format(name, age, height))
Name: John; Age: 16; Height: 1.72m

Метод format() лучше, потому что:

  1. Вам не нужно быть уверенным в типе данных
  2. Можно вставить данные любого типа
  3. Можно многократно использовать значение с помощью индексации.
>>> from datetime import datetime
>>> print("{} test scores in a list {} on {}".format(name, [23, 25.5, 28], datetime.now()))

John test scores in a list [23, 25.5, 28] on 2021–03–15 13:30:39.754769

# Indexing like a list
>>> print("{0} is {3}. {0} loves {1}, {2} and {0}".format(name, 'Harry Potter', 'ice cream', age))

John is 16. John loves Harry Potter, ice cream and John

# Another form of index
>>> print("{fname} {lname} is {age}".format(age=16, fname="John", lname="Snow"))

John Snow is 16

Последний пример индекса также иллюстрирует, что значения в методе format могут быть выражены в виде списка пар ключ=значение.

f-строки

Еще одним привлекательным вариантом является литерал форматированной строки (f-строка).

>>> print(f"{name} is {age}, and today is {datetime.now().strftime('%Y-%m-%d')}")

John is 16, and today is 2021–03–15

Главное преимущество этого подхода в том, что он позволяет вам легко узнать, где находится значение. Ну и мне кажется, это круто выглядит.

Но есть и минусы:

  1. Требуется python>=3.6. Вы должны быть уверены в этом, чтобы избежать ошибки.
  2. Вы не можете включить обратную косую черту в часть выражения (внутри {}).
  3. Пункт 2 также означает, что вы не можете включить '"' без получения SyntaxError.

Заключение

  • Метод format() — наилучший способ вставить переменную в строку, на мой взгляд.
  • f-string — это круто, очень круто. Но требует python≥3.6
  • Форматирование при помощи % тоже по-своему удобно.
  • А первый метод, с перечислением через запятую, отлично подходит для быстрой работы.

Перевод статьи Bisola Olasehinde «4 ways to add variables or values into Python strings».

1 комментарий к “Как добавить переменную в строку в Python”

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *