Python f-строки – PEP 498 – Литеральная строковая интерполяция

Строки f-strings или форматированные строки – это новый способ форматирования строк. Эта функция была представлена в Python 3.6 в рамках PEP-498. Её также называют интерполяцией строк буквальных значений.

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

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

  • % форматирование – отлично подходит для простого форматирования, но ограниченная поддержка для строк, только int, double. Мы не можем использовать его с объектами.

  • Шаблонные строки – это очень базовый метод. Шаблонные строки работают только с именованными аргументами, подобно словарям. Нам не разрешено вызывать любые функции, и аргументы должны быть строками.

  • Форматирование строки() – Функция форматирования строк в Python была введена для преодоления проблем и ограниченных возможностей %-форматирования и шаблонных строк. Однако она слишком многословна. Давайте рассмотрим ее многословность на простом примере.

    >>> возраст = 4 * 10
    >>> 'Мой возраст {age} лет.'.format(age=возраст)
    'Мой возраст 40 лет.'
    

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

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

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

Примеры 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 and F are same

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-строк, они не изменяются, даже если значение выражения изменится. Поэтому в приведенном выше фрагменте кода значение 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-строк.

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 и другими примерами нашего репозитория GitHub.

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

Source:
https://www.digitalocean.com/community/tutorials/python-f-strings-literal-string-interpolation