F-строки и интерполяция строк в Python 

F-строки, или отформатированные строки — это новый способ форматирования, введенный в Python 3.6 в рамках PEP-498. Этот способ также называется интерполяцией строк.

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

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

  • Оператор % подходит для простого форматирования, но имеет ограниченную поддержку — он подходит только для строк, целых чисел и чисел с плавающей точкой.
  • Template Strings (шаблонные строки) — это очень базовый метод. Эти строки работают только с ключевыми аргументами, как в словаре. При этом вызывать любые функции нельзя, а аргументы должны быть строками.

Чтобы преодолеть ограничения оператора % и шаблонных строк, была создана функция format(). Однако она получилась слишком длинная. 

Давайте рассмотрим простой пример:

>>> age = 4 * 10
>>> 'My age is {age}.'.format(age=age)
'My age is 40.'

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

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

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

Примеры использования f-строк в Python

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

name = '8host'
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 is already evaluated and won't change now
print(f_string)

Вывод будет следующим:

My Name is 8host and my age is 34
My Name is 8host and my age is 34
My Name is 8host and my age is 34

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

Выражения и преобразования

С помощью f-строк можно конвертировать datetime в определенный формат. Кроме того, в f-строках мы можем выполнять математические выражения.

from datetime import datetime

name = '8host'
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 = 8host
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 = '8host'
Default Formatted Date = 2018-10-10 11:47:12.818831
Custom Formatted Date = 10/10/2018

Поддержка необработанных строк

С помощью 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-1011:47:12.818831

Объекты и атрибуты

Мы также можем получить доступ к атрибутам объектов.

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, '8host')
print(emp)
print(f'Employee: {emp}\nName is {emp.name and id is {emp.id}')

Мы получим следующий вывод:

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

Вызов функций

При форматировании f-строк можно вызывать функции:

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

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

Вывод будет следующим: 

Sum(10,20) = 30

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

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

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

Лямбда-выражения

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

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

Другие примеры использования f-строк

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

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

Вывод будет следующим:

quoted string
{ 40 }
{40}

Вы можете ознакомиться с полным скриптом Python и другими примерами в репозитории GitHub.

Читайте также: 

Tags:

Добавить комментарий