Что такое f строка в python

Что такое f строка в python

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

Пример: name = «Алиса», age = 30. С f-строкой f»{name} – {age} лет» сразу вернёт «Алиса – 30 лет». F-строки поддерживают любые выражения, включая вызовы функций, арифметику и доступ к атрибутам: f»{user.name.upper()} – {user.age + 1}».

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

Если требуется вывести отладочную информацию, начиная с Python 3.8 можно использовать синтаксис f»{var=}», который автоматически вставит имя переменной и её значение, например: var = 42f»{var=}» даст «var=42».

Как вставлять переменные в строки с помощью f-строк

Как вставлять переменные в строки с помощью f-строк

f-строки (форматированные строковые литералы) позволяют внедрять значения переменных непосредственно в строку, используя синтаксис f"текст {переменная}". Это упрощает код и повышает его читаемость.

Пример базового использования:

name = "Андрей"
age = 28
print(f"Имя: {name}, возраст: {age}")

Можно выполнять выражения прямо внутри фигурных скобок:

price = 49.99
quantity = 3
print(f"Сумма: {price * quantity} руб.")

Форматирование чисел:

value = 12.34567
print(f"Округлённое значение: {value:.2f}")  # 12.35

Для целых чисел:

number = 42
print(f"{number:05}")  # 00042

Работа с датами требует модуля datetime:

from datetime import datetime
now = datetime.now()
print(f"Текущая дата: {now:%d.%m.%Y}")

Вложенные выражения и вызовы функций тоже допустимы:

def get_name():
return "Ольга"
print(f"Пользователь: {get_name().upper()}")

Чтобы вставить фигурные скобки как символы, нужно удвоить их:

value = 10
print(f"{{Значение: {value}}}")  # {Значение: 10}

f-строки не поддерживают выражения с присваиванием (:=) в Python до версии 3.8 включительно. С Python 3.12 можно использовать вложенные f-строки, но не во всех контекстах это безопасно. Используйте только, если уверены в необходимости:

name = "Катя"
print(f"Привет, {f'{name}!'}")

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

Форматирование чисел и дат внутри f-строк

Пример:

price = 1234.56789
print(f"Цена: {price:.2f} ₽")

Для выравнивания по ширине применяется {value:10.2f} – число занимает не менее 10 символов, включая два после запятой:

Пример:

value = 7.5
print(f"Значение: {value:10.2f}")

Разделители тысяч добавляются через , или пробел: {value:,.0f} или {value:_.0f}:

Пример:

n = 1000000
print(f"{n:,} – с запятой")
print(f"{n:_} – с подчёркиванием")

1,000,000 – с запятой

1_000_000 – с подчёркиванием

Пример:

num = 255
print(f"{num:b}") # 11111111
print(f"{num:o}") # 377
print(f"{num:x}") # ff

Форматирование дат требует модуля datetime. Используйте метод strftime() внутри f-строки:

Пример:

from datetime import datetime
now = datetime.now()
print(f"Текущая дата: {now.strftime('%d.%m.%Y')}")

Для времени: {now.strftime('%H:%M:%S')} – 24-часовой формат. Для ISO 8601: {now.isoformat()}.

Если нужно отображать дату с локализацией, используйте модуль locale с установкой нужной локали перед вызовом strftime().

Вложенные выражения и вызовы функций в f-строках

Вложенные выражения и вызовы функций в f-строках

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

Пример с вызовом функции:

def формат_цены(цена):
return f"{цена:,.2f} ₽"
цена = 15720.5
print(f"Итоговая сумма: {формат_цены(цена)}")

Вложенные вызовы:

def с_налогом(сумма):
return сумма * 1.2
print(f"Сумма с налогом: {формат_цены(с_налогом(цена))}")

Арифметика и логика прямо внутри f-строки:

количество = 3
цена_за_штуку = 499.99
print(f"Общая стоимость: {количество * цена_за_штуку:.2f} ₽")

Условное выражение:

баллы = 85
print(f"Оценка: {'отлично' if баллы >= 80 else 'хорошо'}")

Списковые выражения и генераторы:

данные = [1, 2, 3, 4]
print(f"Сумма: {sum(x * 2 for x in данные)}")

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

Сравнение f-строк с .format() и операцией %

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

  • Скорость выполнения: f-строки быстрее обоих альтернатив, так как обрабатываются на этапе компиляции. Метод .format() медленнее из-за необходимости разбора шаблона во время выполнения. Оператор % ближе по скорости к .format().
  • Читаемость: f-строки позволяют вставлять выражения непосредственно в строку: f"{x + y}", без необходимости явно передавать переменные, как в "{}".format(x + y).
  • Гибкость: f-строки поддерживают любые выражения Python: f"{user.name.upper()}". Оператор % не позволяет использовать сложные выражения и требует явного указания типа: "%s" % value.
  • Поддержка форматов: f-строки и .format() поддерживают спецификации формата (например, .2f, :>10), но синтаксис f-строк короче: f"{value:.2f}" против "{:.2f}".format(value). Оператор % также поддерживает форматирование, но ограничен: "%.2f" % value.
  • Ошибки при форматировании: f-строки и .format() выбрасывают исключения при несоответствии аргументов. Оператор % менее устойчив: при неверном типе может silently дать некорректный результат или выбросить TypeError.

Рекомендуется использовать f-строки в новых проектах. Метод .format() уместен, когда формат задаётся динамически (например, из переменной). Оператор % следует избегать, за исключением обратной совместимости с устаревшим кодом.

Многострочные f-строки: синтаксис и примеры

Многострочные f-строки: синтаксис и примеры

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

name = "Анна"
age = 32
info = f"""
Имя: {name}
Возраст: {age}
"""
print(info)

Переводы строк сохраняются автоматически. Чтобы избежать лишних отступов, применяйте функцию textwrap.dedent из модуля textwrap:

import textwrap
name = "Иван"
city = "Казань"
message = f"""{{
textwrap.dedent(f"""
Пользователь: {name}
Город: {city}
""")
}}"""
print(message)

Многострочные f-строки можно комбинировать с выражениями и функциями прямо внутри подстановок:

from datetime import date
user = "Олег"
joined = date(2020, 5, 1)
report = f"""
Пользователь: {user}
Стаж: {(date.today() - joined).days // 365} лет
"""
print(report)

Если требуется включить фигурные скобки как символы, используйте двойные:

value = 42
result = f"""
Значение в словаре: {{'ключ': {value}}}
"""
print(result)

Для повышения читаемости кода избегайте вложенных f-строк внутри f-строк. Вместо этого вынесите выражения в отдельные переменные.

F-строки и экранирование фигурных скобок

В Python фигурные скобки используются для вставки значений в строку с помощью F-строк. Однако, если в строке нужно вывести сами фигурные скобки, необходимо применить экранирование. Это делается с помощью двойных фигурных скобок {{ и }}. Таким образом, одинарные фигурные скобки используются для подстановки значений, а двойные – для их отображения.

Пример экранирования фигурных скобок:


x = 5
formatted_string = f"Значение x: {{x}}"
print(formatted_string)

Результат выполнения кода:


Значение x: {x}

Если не экранировать фигурные скобки, Python попытается интерпретировать их как часть выражения. В результате возникнет ошибка. Важный момент – экранировать нужно именно парные фигурные скобки: одну { или } нельзя экранировать, это приведет к синтаксической ошибке.

Также важно помнить, что экранирование работает только с парой скобок. Например, следующий код вызовет ошибку:


formatted_string = f"Значение x: {x}"

Типовые ошибки при использовании f-строк и способы их избежать

При работе с f-строками в Python могут возникать следующие типовые ошибки:

  • Ошибки синтаксиса при использовании фигурных скобок

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

f"Результат: {10 * 2"

Чтобы избежать ошибки, всегда проверяйте, что все фигурные скобки правильно открыты и закрыты.

  • Неправильное использование кавычек

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

f"Сказал: 'Привет'"

Чтобы избежать ошибок, всегда проверяйте соответствие кавычек.

  • Ошибки при типах данных в выражениях

Некоторые выражения могут привести к ошибке типа. Например, если пытаемся вывести строку с числовым значением без явного преобразования типов, это приведет к ошибке.

f"Значение: {3 + 'a'}"

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

  • Ошибки с экранированием внутри f-строк

Если в строках используется символ обратного слэша, который имеет специальное значение, могут возникнуть проблемы с экранированием. Например:

f"Путь: C:\new\folder"

Чтобы избежать ошибок, используйте либо двойной обратный слэш, либо сырые строки (с префиксом r) для указания пути:

f"Путь: C:\\new\\folder"
f"Путь: {r'C:\new\folder'}"
  • Ошибки с выражениями, возвращающими пустые значения

Если выражение в f-строке возвращает None, это может привести к неожиданному результату. Например:

f"Результат: {None}"

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

  • Ошибки в форматировании чисел

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

f"Число: {12345.6789}"

Чтобы избежать проблемы, указывайте точное требуемое форматирование:

f"Число: {12345.6789:.2f}"

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

Вопрос-ответ:

Ссылка на основную публикацию