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

351

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

Вступление

Что такое форматирование строк?

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

f-строки исполняются при исполнении самой программы. Это работает быстрее других методов.

У f-строк более простой синтаксис в сравнении с другими техниками форматирования Python. Эта особенность будет рассмотрена на примерах.

Синтаксис

Каждая инструкция f-строки состоит из двух частей: символа f (или F) и строки, которую нужно форматировать. Строка должна быть в одинарных, двойных или тройных кавычках.

Синтаксис следующий.

# мы также можем использовать F, '', ''''', """""" 
f"string"

На месте string нужно написать предложение, которое требуется отформатировать.

Отображение переменных

Раньше для форматирования использовался метод str.format(). Новый подход делает все вдвое быстрее.

Переменные в фигурных {} скобках отображаются в выводе как обычно в print. Стоит посмотреть на примере.

# объявление переменных
name = "Pythonru" 
type_of_site = "Блог"  

# заключите переменную в {}, чтобы отобразить ее значение в выводе
print(f"{name} это {type_of_site}.")
Pythonru это Блог.

Все значения переменных отобразились в выводе. С этим все понятно. Вместо f можно написать F.

# объявление переменных
name = "Pythonru" 
type_of_site = "Блог"  

# заключите переменную в {}, чтобы отобразить ее значение в выводе
print(F"{name} это {type_of_site}?")
Pythonru это Блог?

Выражения

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

Просто вставьте выражение в {} для исполнения. Оно выполнится при запуске программы. Экономит время и код.

Вот примеры отдельных выражений.

# объявление переменных
print(f"{2 * 2}")  # вывод: 4

Также в {} можно вызвать функцию. Определим функцию greet() и вызовем ее в f-строке.

def greet(name):  
    return "Привет, " + name
# вызов функции с использованием f-строки
name = "Олег" 
print(f"{greet(name)}")
Привет, Олег

Также можно вызвать определенные заранее методы.

# метод title, делает первую букву каждого слова заглавной
string = "pythonru это блог." 
print(f"{string.title()}")
Pythonru Это Блог.

Что еще умеет f-строка? Отображать объект? Да. Работает это так же, как и при выводе переменных.

class Sample:  
    def __init__(self, name, age): 
        self.name = name 
        self.age = age 

    # этот метод будет вызываться при выводе объекта  
    def __str__(self):  
        return  f'Имя: {self.name}. Возвраст: {self.age}.'
user= Sample("Игорь", 19) 

# это вызовет метод __str__()
print(f"{user}")
Имя: Игорь. Возвраст: 19.

Специальные символы

Что делать, если нужно отобразить специальные символы, такие как {}, \', \"? Они ведь используются в Python для определенных целей. Можно ли использовать экранирование внутри f-строки? Вот ответы на все вопросы.

Кавычки

Можно использовать любые кавычки (одинарные, двойные или тройные) в f-строке. Для их вывода потребуется использовать экранирование. Выражение f-строки не позволяет использовать обратную косую черту. Ее нужно размещать вне {}.

Рассмотрим на примерах.

name = "Pythonru"

# отображение одинарных кавычек
print(f"Привет, \'{name}\'")

print()

# отображение двойных кавычек
print(f"Привет, \"{name}\"")
Привет, 'Pythonru'

Привет, "Pythonru"

Другие кавычки в f-строках.

f'{"Привет, Pythonru"}'  # 'Привет, Pythonru'
f"{'Привет, Pythonru'}"  # 'Привет, Pythonru'
f"""Привет, Pythonru"""  # 'Привет, Pythonru'
f'''Привет, Pythonru'''  # 'Привет, Pythonru'

{} также можно включать в тройные кавычки.

В f-строках нельзя использовать обратную косую черту в {}. Если попробовать, то будет ошибка.

print(f"{\"Pythonru\"}")  # SyntaxError

Скобки

Двойные скобки нужны, чтобы вывести одни фигурные скобки в f-строке.

print(f"{{Pythonru}}")
{Pythonru}

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

print(f"{{{{Pythonru}}}}")
{{Pythonru}}

Словари

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

person = {"name": "Игорь", "age": 19} 
print(f"{person['name']}, {person['age']} лет.")
Игорь, 19 лет.

Со словарями так нельзя.

person = {"name": "Игорь", "age": 19} 
print(f'{person['name']}, {person['age']} лет.')
File "<ipython-input-65-6849ff0810ae>", line 2
    print(f'{person['name']}, {person['age']} лет.')
                        ^
SyntaxError: invalid syntax

Тест на знание python

Как узнать длину списка?
Что выведет этот код?
Какая из функций python делает вывод в консоль?
Какой ввод НЕ приведет к ошибке?
Какой будет результат выполнения кода в python 3 — print(3/5) ?
Викиум