Опубликован: 10.08.2023 175
Начиная с Python 3.6 у программистов появился новый более быстрый, гибкий, легкочитаемый и простой в использовании способ форматирования вывода строк: f-string
(f-строки).
Наиболее часто f-string
применяют для красивого вывода в строку нескольких переменных, используя стандартный синтаксис вставки значений переменных с помощью { }
фигурных скобок.
Но, у f-string
есть и малоизвестные способы применения, которые значительно упрощают форматирование вывода таких объектов, как datatime
, float
с ограничением количества десятичных знаков, денежных значений, заполнения целых чисел ведущими нулями или пробелами и многое другое.
Мини-язык форматирования Python включает в себя гораздо больше, чем конструкции, рассчитанные на форматирование чисел и дат. Этот язык, кроме прочего, позволяет выравнивать или центрировать текст, добавлять к строкам начальные нули или пробелы, задавать разделители групп разрядов и многое другое.
Стандартный способ применения f-string
- вставка в выводимую строку значений переменных с помощью { }
фигурных скобок:
first_name, last_name, age = 'Александр', 'Пушкин', 31
print(f'Имя: {first_name}, Фамилия: {last_name}, Возраст: {age}')
Имя: Александр, Фамилия: Пушкин, Возраст: 31
Все содержимое такой строки находится в конструкции f'...' (с одинарными или двойными кавычками), а названия переменных внутри строки заключаются в фигурные скобки {...}.
Фигурные скобки внутри f-строки
имеют большие возможности: внутри них можно вызывать функции, элементы списков и словарей, а также выполнять операции — нужно просто вставить соответствующие выражения:
# выполнение математических операций
num = 5
print(f'{num} в квадрате равно {num * num}')
# Вывод
5 в квадрате равно 25
# вызов элементов словаря
dict = {'name': 'Владимир', 'profession': 'программист'}
print(f"{dict['name']} - это наш {dict['profession']}.")
# Вывод
Владимир - это наш программист.
Важно использовать разные кавычки: для f-string
двойные, а для ключей словаря одинарные, иначе Python выдаст синтаксическую ошибку.
float
и знаки после запятойВ f-string
при выводе объектов float
можно указать количество десятичных знаков после запятой, количество символов, выделенных для вывода значения, а также выровнять значение по левому или правому краю.
# Общий синтаксис:
f'{value:{width}.{precision}}'
Значение value
, двоеточие :
, затем ширина строки {width}
в фигурных скобках, точка .
, требуемая точность {precision}
в фигурных скобках.
# точность вывода числового значения:
pi = 3.14159265
print(f'{pi:.2f}')
3.14
Если в параметре precision
указать 2f
, то значение выводится с двумя знаками после запятой.
Буква f в данном случае означает fractional part, то есть дробную часть числа.
Если оставить просто 2, то значение целиком — и целая, и дробная часть — будет занимать два знака (точка не считается):
print(f'{pi:.2}')
3.1
width
В f-string
параметр {width}
, в фигурных скобках после двоеточия и перед .
точкой, определяет ширину строки, выделенной под значение, и выравнивание в ней:
print(f'{5:<5}₽') # ширина 5 символов с выравниванием влево `<`
5 ₽
print(f'{5:>5}₽') # ширина 5 символов с выравниванием вправо `>`
5₽
print(f'{5:^5}₽') # ширина 5 символов с выравниванием по центру `^`
5 ₽
# печать трех колонок: первая шириной в 2 символа (с заполнением коротких
# значений нулями), вторая в 3 символа, третья в 4 символа
for x in range(1, 11):
print(f'{x:02} {x*x:3} {x*x*x:4}')
01 1 1
02 4 8
03 9 27
04 16 64
05 25 125
06 36 216
07 49 343
08 64 512
09 81 729
10 100 1000
Если не указать направление выравнивания <
или >
, то строка по умолчанию будет выравниваться по левому краю <
, а числа по правому >
.
float
в “красивый” денежный форматДля вывода в f-string
больших числовых значений в денежном формате используется способ с указанием разделителя разрядов числа.
Если необходимо "красиво" вывести денежную сумму 3142671.7623, то в качестве разделителя разрядов можно указать после двоеточия :
запятую ,
или нижнее подчеркивание _
и далее количество десятичных знаков (например, два знака .2f
).
money = 3142671.7623
# разделение числовых разрядов запятыми
print(f"${money:,.2f}")
# $3,142,671.76
# разделение числовых разрядов пробелами
print(f"${money:_.2f}".replace('_', ' '))
# $3 142 671.76
int
ведущими нулями или пробеламиВ f-string
легко выводить целые числа определенной ширины с помощью спецификатора width
с заполнением пустых ведущих позиций числа нулями или пробелами.
# печать 20-ти значных чисел с заполнением ведущих позиций нулями
int_val = 1234567
print(f'{int_val:020}')
00000000000001234567
# печать 10-ти значных чисел с заполнением ведущими пробелами
int_val = 2023
print(f'{int_val:10d}')
2023
float
в процентный форматВ f-string
с помощью спецификатора %
можно вывести десятичные значения в формате процентов, например:
value = 1/7.0
print(f"{value}")
0.14285714285714285
print(f"{value:.2%}") # в процентном формате
14.29%
print(f"{value:10.3%}") # в процентном формате шириной 10 и 3 десятичных знака
14.286%
datetime
В f-string
очень удобно форматировать вывод объектов datetime
с помощью спецификаторов даты и времени с использованием символов %
, которые указываются после двоеточия :
.
Для форматирования вывода дат и времени применяются спецификаторы в виде строковых форматов (указываемых после символа %
):
from datetime import datetime
today = datetime.today() # текущее значение даты и времени
# вывод полной информации о текущей дате и времени
print(f"Сегодня: {today}")
Сегодня: 2023-09-16 13:12:22.705607
# вывод даты в формате (дд-месяц-ГГГГ)
print(f"{today:%d-%B-%Y}")
16-September-2023
# вывод даты и времени в формате (дд-мм-ГГГГ ЧЧ:ММ)
print(f"{today:%d-%m-%Y %H:%M}")
16-09-2023 13:18
Cписок кодов форматирования, которые работают на всех платформах со стандартной реализацией языка C.
%a
- Сокращенное название дня недели в локали (по умолчанию: Sun, Mon, …, Sat);%A
- Полное название дня недели в локали (по умолчанию: Sunday, Monday, …, Saturday);%w
- День недели как число, где 0 это Воскресение и 6 — суббота (0, 1, …, 6);%d
- День месяца в виде десятичного числа с нулем (01, 02, …, 31);%b
- Месяц как сокращенное название в локали (по умолчанию: Jan, Feb, …, Dec);%B
- Месяц как полное название в локали (по умолчанию: January, February, …, December);%m
- Месяц в виде десятичного числа с добавлением нуля (01, 02, …, 12);%y
- Год без столетия как десятичное число с нулем (00, 01, …, 99);%Y
- Год с веком как десятичное число (0001, 0002, …, 2013, 2014, …, 9998, 9999);%H
- Час (24-часовой формат) в виде десятичного числа с добавлением нуля (00, 01, …, 23);%I
- Час (12-часовые часы) в виде десятичного числа с добавлением нуля (01, 02, …, 12);%p
- Локальный эквивалент либо AM, либо PM (AM, PM);%M
- Минута как десятичное число с добавлением нуля (00, 01, …, 59);%S
- Секунда как дополненное нулями десятичное число (00, 01, …, 59);%f
- Микросекунда как десятичное число, дополненное нулями слева (000000, 000001, …, 999999);%z
- Смещение UTC в форме ±HHMM[SS[.ffffff]]
или пустая строка, если объект наивный (+0000, -0400, +1030, +063415, -030712.345216);%Z
- Имя часового пояса или пустая строка, если объект наивный (UTC, EST, CST);%j
- День года в виде десятичного числа с нулем (001, 002, …, 366);%U
- Номер недели в году (воскресенье - первый день недели) в виде десятичного числа с добавлением нуля. Все дни в новом году, предшествующем первому воскресенью, считаются на неделе 0 (00, 01, …, 53);%W
- Номер недели в году (понедельник - первый день недели) в виде десятичного числа. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0 (00, 01,…, 53);%c
- Соответствие локали дате и времени (Tue Aug 16 21:30:00 1988)%x
- Соответствующее представление даты локали (08/16/88 (None); 08/16/1988 (en_US);%X
- Соответствующее время локали (21:30:00);%%
- Буквальный символ '%' (%);Оценка основных статистических метрик набора данных в Python
Область эффективного использования lambda функции в Python
Логические выражения if ... else в Pythonic стиле
Способы удаления лишних пробелов в строке
Комментариев нет.