Как добавить переменную в строку в 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».

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

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