Полное руководство по f-строкам в Python (2024)

Строки, которые начинаются спрефикса f исодержат выражения спеременными внутри фигурных скобок {}, называютf-строками. Они были добавлены вPython 3.6.0.

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

Способы форматирование строк в Python:

  1. Форматирование при помощи %'текст %s' % переменная
  2. Метод .format()'текст {}'.format(переменная)
  3. f-sстроки— f'текст {переменная} текст'

Форматирование при помощи %

Форматирование при помощи % применяется лишь кцелым числам, строкам ивещественным числам. Любой другой тип данных либо неподдерживается, либо преобразуется вподходящий формат. Если указать сразу несколько значений, то такой способ вызовет ошибку TypeError. Это подробно описано вофициальной документации.

>>> msg = 'отказ доступа'print('Ошибка: %s' % msg)# Ошибка: отказ доступа# Если msg представлен кортежемmsg = ('отказ достуа', 42)print('Ошибка: %s' % msg)# Traceback (most recent call last):# File "<stdin>", line 1, in <module># TypeError: not all arguments converted during string formatting# Но можно передать таким образом составной объект>>> print('Ошибка: %s' % (msg,))# Ошибка: ('отказ доступа', 42)

Форматирование при помощи метода .format()

Метод str.format(), вотличие отформатирования через %, поддерживает нескольких параметров, которые могут быть дополнительно расширены спомощью __format()__. Основная проблема сним— перегруженность. Взгляните наследующий код, переменная «name» используется слишком часто:

>>> name = 'Олег'>>> print('Меня зовут {name}.'.format(name=name))# Меня зовут Олег.

Тем не менее, мы можем использовать сокращённый метод:

>>> name = 'Олег'>>> print('Меня зовут {}.'.format(name))# Меня зовут Олег.

Поэтому метод format() прост и удобен только в том случае, если у нас не слишком много переменных.

Использование f-строк в Python

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

Синтаксис f-строк

f'текст {переменная} текст'

Следующий пример демонстрирует простоту использования метода:

name = 'Олег'age = 1000print(f'Меня зовут {name}, мне {age} лет.')# Меня зовут Олег, мне 1000 лет.

Функции, lambda-функции и расчёты

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

Расчёты:

>>> print(f'8 плюс 10 будет {8 + 10}.')# 8 плюс 10 будет 18.

Методы:

name = 'олег'>>> print(f'Меня зовут {name.upper()}.')# Меня зовут ОЛЕГ.

Функции:

def foo(): return 10 print(f'Результат: {foo()}.')# Результат: 10.

lambda-функции:

print(f'4 в степени 4 будет {(lambda x: x*4)(4)}.')# 4 в степени 4 будет 16.

escape-символы и f-строки

f-строки не поддерживают escape-символы внутри фигурных скобок, а значит, мы не можем включить в них обратный слэш (\) для экранирования других символов. Вместо использования escape-символа мы, например, можем использовать другой тип кавычек. При этом обратный слэш разрешается в текстовой части строки.

print(f'Текст в {'одинарных кавычках'}.')# SyntaxError: f-string: expecting '}'print(f'Текст в {\'одинарных кавычках\'}.')# SyntaxError: f-string expression part cannot include a backslashprint(f'Текст в {"двойных кавычках"}.')# Текст в двойных кавычках.print(f'В самом тексте обратный слэш использовать можно, вот так: \', ', {"ура!"}.')# В самом тексте обратный слэш использовать можно, вот так: \', ура!

Комментарии

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

print(f'Олегу {30 + 1 #возраст}')# SyntaxError: f-string expression part cannot include '#'

Фигурные скобки

При работе с f-строками вы можете напечатать фигурные скобки, используя 2 пары фигурных скобок, чтобы получить на выходе 1 пару, или 4 пары фигурных скобок, чтобы получить на выходе 2 пары:

print(f'{{"1 пара фигурных скобок"}}')# {"1 пара фигурных скобок"}print(f'{{{"И тут 1 пара фигурных скобок"}}}')# {И тут 1 пара фигурных скобок}print(f'{{{{"А тут 2 пары"}}}}')# {{"А тут 2 пары"}}

Словари и f-строки

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

details = {'name': 'Олег', 'age' : 1000}# При использовании одинарных кавычекprint(f'Меня зовут {details['name'], мне {details['age'].')# SyntaxError: f-string: unmatched '['# С использованием экранированияprint(f'Меня зовут {details[\'name\'], мне {details[\'age\'].')# SyntaxError: f-string expression part cannot include a backslash# Выход – используйте разные типы кавычек (например, двойные)print(f'Меня зовут {details["name"]}, мне {details["age"]}.')# Меня зовут Олег, мне 1000.

Заполнение f-строки (f-strings padding)

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

Дополнение строк нулями (0-Padding)

Мы можем дополнять числа в строке нулями (0-Padding) добавляя {переменная:0N} внутри скобок, где N является общим количеством цифр:

for n in range(1, 11): print(f'Число: {n:02}')# Число: 01# Число: 02# Число: 03# Число: 04# Число: 05# Число: 06# Число: 07# Число: 08# Число: 09# Число: 10

Округление чисел (Decimal Places)

Округлять числа (float) можно следующим образом: {переменная:.Nf}, где N – количество цифр после точки. И да, что этот способ не просто удаляет лишние цифры, а правильно их округляет.

from math import piprint(f'Число Пи: {pi :.4f}')# Число Пи: 3.1416

Форматирование дат (Date Formatting)

Для форматирования даты в f-строках, нам необходимо использовать модуль datetime и добавить желаемый формат в фигурные скобки {дата:формат}. Со всеми форматами можно ознакомиться на официальном сайте модуля.

import datetimedate = datetime.date(1991, 10, 12)print(f'{date} — {date:%A}')# 1991-10-12 — Saturdayprint(f'{date:%A, %B %d, %Y}.')# Saturday, October 12, 1991.

Дополнение пробелами (Space Padding)

Дополнить строки пробелами можно при помощи {переменная:N} где N— это общая длина выражения внутри фигурных скобок. Если переменная равна 1, аNравна 4, то это добавит 3 пробела перед 1, следовательно, сделает общую длину равной 4.

for n in range(1,11): print(f'Число: {n:4}')# Число: 1# Число: 2# Число: 3# Число: 4# Число: 5# Число: 6# Число: 7# Число: 8# Число: 9# Число: 10

Выравнивание строки

И, наконец, мы можем выровнять строку, используя {переменная:>N} где N – это общая длина.

s1 = 'Python's2 = 'ython's3 = 'thon's4 = 'hon's5 = 'on's6 = 'n'print(f'{s1:>6}')print(f'{s2:>6}')print(f'{s3:>6}')print(f'{s4:>6}')print(f'{s5:>6}')print(f'{s6:>6}')# Output:'''Python ython thon hon on n'''

Итого:

  1. Дополнение чисел нулями (0 Padding) - {переменная:0N}
  2. Округление чисел (Decimal Places) - {переменная:.Nf}
  3. Форматирование дат (Date Formatting) - {дата : формат}
  4. Дополнение пробелами (Space Padding) - {переменная:N}
  5. Выравнивание строки (Justified string) - {переменная:>N}

Различные способы записи чисел

В f-строках мы можем применять различные способы записи чисел: шестнадцатеричный (Hexadecimal), восьмеричный (Ocatal), экспоненциальный (scientific) и так далее. Для этого используем синтаксис {переменная:способ записи} как показано в примере ниже:

number = 800# шестнадцатеричный форматprint(f'{number:x}')# восьмеричный форматprint(f'{number:o}')# экспоненциальный форматprint(f'{number:e}')# 320# 1440# 8.000000e+02

Сырые (raw) f-строки

Использовать сырые f-строки можно при помощи синтаксиса {переменная!r}:

name = 'Джон'print(f'Его зовут {name!r}.')# Его зовут 'Джон'.

Многострочные f-строки

Добавляйте f в начале каждой строки, как показано ниже:

name = 'Олег'age = 1000profession = "data scientist"sentence = ( f'Меня зовут {name}. ' f'Мне {age}. ' f'Я {profession}.' )print(sentence)# Меня зовут Олег.Мне 1000.Я data scientist.

Такой же результат получится при использовании ''' (тройных кавычек) как в следующем примере, но такой способ автоматически будет добавлять перенос на следующую строку (\n):

name = 'Олег'age = 1000profession = "data scientist"sentence = f"""Меня зовут {name}.Мне {age}.Я {profession}.""" print(sentence)# Меня зовут Олег.\nМне 1000.\nЯ data scientist.

Сравнение скорости способов форматирования

Быстрее ли в итоге f-строки? Да. Следующий пример показывает, что f-строки минимум в два раза быстрее других способов.

import timeittimeit.timeit("""name="Олег"age = 1000'%s – %s.' %(name, age)""", number = 1000000)# 0.5408120879999956timeit.timeit("""name="Олег"age = 1000'{} – {}.'.format(name, age)""", number = 1000000)# 0.5696044179999831timeit.timeit("""name="Олег"age = 1000f'{name} – {age}.'""", number = 1000000)# 0.2470700240000383

Заключение

Опираясь на всю информацию, которую мы получили ранее, выделим следующие преимущества использования f-строк, по отношению к другим способам форматирования:

  • они быстрее;
  • они читабельнее;
  • они лаконичнее.

Выбор очевиден :)

Источник: SaralGyaan
Перевод иадаптация: Александр Сердюк

👉🏻Подписывайтесь на PythonTalk в Telegram 👈🏻

👨🏻‍💻Чат PythonTalk в Telegram💬

🍩 Поддержать канал 🫶

Полное руководство по f-строкам в Python (2024)
Top Articles
Latest Posts
Article information

Author: Otha Schamberger

Last Updated:

Views: 6095

Rating: 4.4 / 5 (75 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Otha Schamberger

Birthday: 1999-08-15

Address: Suite 490 606 Hammes Ferry, Carterhaven, IL 62290

Phone: +8557035444877

Job: Forward IT Agent

Hobby: Fishing, Flying, Jewelry making, Digital arts, Sand art, Parkour, tabletop games

Introduction: My name is Otha Schamberger, I am a vast, good, healthy, cheerful, energetic, gorgeous, magnificent person who loves writing and wants to share my knowledge and understanding with you.