Пропустить до содержимого

Как использовать интерполяцию строк в Python?

[

Python-строковая интерполяция и форматирование

Введение

f-строки в Python позволяют быстро выполнять интерполяцию и форматирование строк. Они читаемы, лаконичны и менее подвержены ошибкам по сравнению с традиционными инструментами интерполяции и форматирования строк, такими как метод .format() и оператор модуля (%). Кроме того, использование f-строк может повысить производительность!

В этом руководстве вы узнаете, почему f-строки являются мощным инструментом, который следует изучить и овладеть для разработки на Python.

Внутри этого руководства вы узнаете, как:

  • Интерполировать значения, объекты и выражения с использованием f-строк
  • Форматировать f-строки с помощью синтаксиса мини-языка форматирования строк Python
  • Пользоваться некоторыми удивительными возможностями f-строк в Python 3.12 и выше
  • Решить, когда использовать традиционные методы интерполяции вместо f-строк

Подготовка

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

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

Интерполяция и форматирование строк до Python 3.6

До Python 3.6 у вас было два основных инструмента для интерполяции значений, переменных и выражений внутри строковых литералов:

  1. Оператор модуля (%)
  2. Метод str.format()

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

Оператор модуля

Оператор модуля (%) - это традиционный метод интерполяции строк в Python. Он позволяет вставлять значения в определенные места внутри строки.

>>> name = "Alice"
>>> age = 25
>>> print("My name is %s and I am %d years old." % (name, age))
My name is Alice and I am 25 years old.

Метод .format()

Метод .format() - это более гибкий метод интерполяции строк в Python. Он позволяет вставлять значения в строку, используя именованные или позиционные параметры.

>>> name = "Bob"
>>> age = 30
>>> print("My name is {} and I am {} years old.".format(name, age))
My name is Bob and I am 30 years old.

Интерполяция строк с помощью f-строк в Python

f-строки - это новый метод интерполяции строк, который был введен в Python 3.6. Он предлагает простой и удобный синтаксис для вставки значений, объектов и выражений в строки.

>>> name = "Charlie"
>>> age = 35
>>> print(f"My name is {name} and I am {age} years old.")
My name is Charlie and I am 35 years old.

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

Форматирование строк с помощью f-строк в Python

f-строки также поддерживают форматирование с использованием мини-языка форматирования строк Python. Это позволяет вам изменять вид и формат вывода ваших строк.

>>> pi = 3.14159265359
>>> print(f"The value of pi is approximately {pi:.2f}.")
The value of pi is approximately 3.14.

С помощью двоеточия : вы можете указать формат вывода для значения, находящегося внутри фигурных скобок. В приведенном выше примере .2f означает, что число должно быть представлено с двумя знаками после запятой.

Другие полезные особенности f-строк

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

Использование представлений объектов в f-строках

>>> class Person:
... def __init__(self, name, age):
... self.name = name
... self.age = age
... def __str__(self):
... return f"Name: {self.name}, Age: {self.age}"
...
>>> person = Person("David", 40)
>>> print(f"The person is: {person}")
The person is: Name: David, Age: 40

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

Самодокументирование выражений для отладки

>>> a = 10
>>> b = 5
>>> c = a + b
>>> print(f"The sum of {a=} and {b=} is {c=}")
The sum of a=10 and b=5 is c=15

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

Сравнение производительности: f-строки против традиционных инструментов

>>> name = "John"
>>> age = 20
>>> %timeit "My name is %s and I am %d years old." % (name, age)
1.52 µs ± 34.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
>>> %timeit "My name is {} and I am {} years old.".format(name, age)
1.94 µs ± 55.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
>>> %timeit f"My name is {name} and I am {age} years old."
0.633 µs ± 8.23 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

При сравнении производительности f-строки оказываются быстрее использования оператора модуля и метода .format(). Время выполнения кода с использованием f-строк значительно меньше, что может быть важно для программ с большим объемом данных.

Обновление на f-строки: Python 3.12 и выше

В Python 3.12 были внесены некоторые изменения в синтаксис f-строк для улучшения их читаемости и удобства использования.

Использование кавычек

В предыдущих версиях Python для вставки апострофов или кавычек внутри f-строк вы должны были использовать экранирование с помощью обратной косой черты:

>>> name = "Alice"
>>> print(f"She said, \"My name is {name}\"")
She said, "My name is Alice"

В Python 3.12 и выше, вы можете использовать идущие подряд апострофы или кавычки того же типа, что и вокруг f-строки, для вставки их непосредственно:

>>> name = "Alice"
>>> print(f'She said, "My name is {name}"')
She said, "My name is Alice"

Использование обратной косой черты

Использование обратной косой черты для продолжения строки в f-строках также упрощается с Python 3.12:

>>> name = "Bob"
>>> message = f"This is a very long message that \
... spans multiple lines and is \
... {name=}"
>>> print(message)
This is a very long message that spans multiple lines and is name='Bob'

Теперь вы можете вставить \ в конец строки, и Python автоматически создаст контекст, который продолжит строку.

Написание комментариев внутри f-строк

Python 3.12 также предлагает возможность добавить комментарий непосредственно внутри f-строки. Это может быть полезно для дополнительного объяснения сложных выражений или для документирования кода.

>>> a = 3
>>> b = 4
>>> print(f"The result is {a + b} # Sum of a and b")
The result is 7 # Sum of a and b

Расшифровка сообщений об ошибке f-строк

Python 3.12 также улучшает сообщения об ошибках в f-строках, делая их более информативными и понятными. Это может помочь вам быстро найти и исправить проблемы в вашем коде.

Использование традиционных инструментов форматирования строк вместо f-строк

Хотя f-строки предлагают множество преимуществ, иногда традиционные инструменты форматирования строк все-таки остаются полезными в некоторых случаях:

Интерполяция словаря

>>> person = {"name": "Alice", "age": 25}
>>> print("My name is %(name)s and I am %(age)d years old." % person)
My name is Alice and I am 25 years old.

Отложенное вычисление при логировании

>>> import logging
>>> level = logging.DEBUG
>>> message = f"The current log level is {level}"
>>> logging.debug(message)

SQL-запросы к базе данных

>>> query = f"SELECT * FROM {table} WHERE id={id}"
>>> cursor.execute(query)

Локализация и интернационализация

>>> import gettext
>>> message = gettext.ngettext(f"There is {count} message.", f"There are {count} messages.", count)
>>> print(message)

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

Автоматическое преобразование старых строк в f-строки

Если вы работаете с проектом, в котором используются старые методы форматирования строк (например, % или .format()), вы можете автоматически преобразовать эти строки в f-строки с помощью инструментов и скриптов, таких как 2to3.

Преобразование старых строк в f-строки может быть полезным, если вы хотите улучшить читаемость и производительность своего кода.

Выводы

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

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

Дополнительные ресурсы