f-строки в Python

Python f-строки или форматированные строки – это относительно новый способ форматирования строк. Эта возможность была представлена в Python 3.6 в рамках PEP-498. Ее также называют интерполяцией для литералов строк (англ. Literal String Interpolation).

Зачем нам нужны f-строки?

Python предоставляет различные способы форматирования строки. Давайте быстро рассмотрим их, и какие у них есть проблемы.

  • Форматирование через % – отлично подходит для простого форматирования, но имеет ограниченную поддержку только для строк, чисел чисел с плавающей точкой. Мы не можем использовать его с объектами.
  • Шаблонные строки – это очень просто. Шаблонные строки работают только с аргументами ключевых слов, таких как словарь. Нам не разрешается вызывать какие-либо функции, а аргументы должны быть строками.
  • Метод строки format() – был введен для преодоления проблем и ограниченных возможностей %-форматирования и шаблонных строк. Однако он слишком громоздкий. Давайте рассмотрим это на простом примере.
>>> age = 4 * 10
>>> 'My age is {age}.'.format(age=age)
'My age is 40.'

Python f-строки работают почти так же, как метод format(), но избавлены  от излишнего синтаксиса, которым обладает этот метод. Давайте посмотрим, как легко мы можем отформатировать приведенную выше строку с помощью f-strings.

>>> f'My age is {age}'
'My age is 40.'

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

Примеры f-строк в Python

Давайте рассмотрим простой пример использования f-строк.

name = 'Pankaj'
age = 34

f_string = f'My Name is {name} and my age is {age}'

print(f_string)
print(F'My Name is {name} and my age is {age}')  # работает как с f, так и с F

name = 'David'
age = 40

# f_string уже выполнилась, так что значение не меняется.
print(f_string)

Вывод:

My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34

Python выполняет операторы один за другим, и после того, как выражение f-string будет вычислено, оно не изменится, даже если значение выражения изменится. Поэтому в приведенных выше фрагментах кода значение f_string остается неизменным даже после изменения переменных name и age во второй части программы.

1. f-строки с выражениями и преобразованиями

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

from datetime import datetime

name = 'David'
age = 40
d = datetime.now()

print(f'Age after five years will be {age+5}')  # age = 40
print(f'Name with quotes = {name!r}')  # name = David
print(f'Default Formatted Date = {d}')
print(f'Custom Formatted Date = {d:%m/%d/%Y}')

Вывод:

Age after five years will be 45
Name with quotes = 'David'
Default Formatted Date = 2018-10-10 11:47:12.818831
Custom Formatted Date = 10/10/2018

2. f-строки поддерживают Сырые строки (Raw strings)

Мы можем создавать сырые строки, используя f-строки. Данный формат строк нужен для предотвращения форматирования таких символов как \n в перенос строки.

print(f'Default Formatted Date:\n{d}')
print(fr'Default Formatted Date:\n {d}')

Вывод:

Default Formatted Date:
2018-10-10 11:47:12.818831
Default Formatted Date:\n 2018-10-10 11:47:12.818831

3. f-строки с объектами и свойствами

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

class Employee:
    id = 0
    name = ''

    def __init__(self, i, n):
        self.id = i
        self.name = n

    def __str__(self):
        return f'E[id={self.id}, name={self.name}]'


emp = Employee(10, 'Pankaj')
print(emp)

print(f'Employee: {emp}\nName is {emp.name} and id is {emp.id}')

Вывод:

E[id=10, name=Pankaj]
Employee: E[id=10, name=Pankaj]
Name is Pankaj and id is 10

4. Вызов функций в f-строках

Мы можем вызывать функции и в форматировании f-строк.

def add(x, y):
    return x + y


print(f'Sum(10,20) = {add(10, 20)}')

Вывод:

Sum(10,20) = 30

5. f-строка с пробелами

Если в выражении в скобках {} есть ведущие или последующие пробелы, они игнорируются. Если буквальная часть строки содержит пробелы, то они сохраняются.

>>> age = 4 * 20
>>> f'   Age = {  age   }  '
'   Age = 80  '

6. Лямбда-выражения с f-строками

Мы можем использовать лямбда-выражения и внутри f-строчных выражений.

x = -20.45
print(f'Lambda Example: {(lambda x: abs(x)) (x)}')

print(f'Lambda Square Example: {(lambda x: pow(x, 2)) (5)}')

Вывод:

Lambda Example: 20.45
Lambda Square Example: 25

7. Различные примеры f-строк

Давайте рассмотрим несколько различных примеров использования f-строк в Python.

print(f'{"quoted string"}')
print(f'{{ {4*10} }}')
print(f'{{{4*10}}}')

Вывод:

quoted string
{ 40 }
{40}

Это все, что касается форматированных строк python, также известных как f-строки.

Полный python-скрипт и другие примеры на Python вы можете посмотреть в репозитории автора оригинальной статьи на GitHub.

Ссылки: PEP-498, Официальная документация

Перевод статьи Pankaj «Python f-strings – PEP 498 – Literal String Interpolation».

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

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