Источник: Nuances of Programming
Если вы изучаете Python уже некоторое время, то, вероятно, используете " " для создания строк. В этом нет ничего плохого. В конце концов, для многих первой строкой кода Python была просто print(“Hello World”). Однако тому, кто хочет повысить уровень работы на Python, следует использовать f-строки.
F-строки (f-strings) были представлены в Python 3.6 как более совершенный способ форматирования строк. В этом руководстве будет подробно рассказано о том, как форматировать строки в Python с помощью f-строк, как добавлять переменные, разделители-запятые, нули справа/слева, даты и многое другое.
Форматирование
Чтобы следовать этому руководству, убедитесь, что у вас установлен Python 3.6 или выше, иначе f-строки не будут работать.
Простое форматирование
F-строки — идеальный синтаксис для добавления переменных в строки.
Напишем два сообщения на Python с помощью f-строк. Для этого нужно добавить литерал f перед символом ‘’, используемым для создания обычных строк. Кроме того, чтобы вставить переменную в строку, следует еще добавить символ {}.
age = 20
python_version = 3.8
>>> print(f'Your age is {age}')
Your age is 20
>>> print(f'python_version={python_version}')
python_version=3.8
Как видите, использовать f-строки для добавления переменных проще, чем обычные строки и оператор +.
F-строки также облегчают отладку. Вместо того, чтобы писать имя переменной и ее значение, как мы делали ранее для python_version, можно записать внутри только f-строки: {variable_name=}.
age = 20
python_version = 3.8
>>> print(f'{age=}')
age=20
>>> print(f'{python_version=}')
python_version=3.8
Теперь перейдем к более продвинутому уровню форматирования. В следующих разделах будем использовать приведенный ниже синтаксис.
Syntax: {:[width][.precision][type]}
Type:
d: integers (целочисленные типы)
f: floating point numbers (числа с плавающей точкой)
*Точность (precision) указывается только при использовании чисел с плавающей точкой
Выравнивание
Необходимость выровнять слово/текст вправо или влево возникает в редких случаях. Тем не менее выравнивание — это основа для понимания того, как добавлять нули слева/справа к числам, что очень полезно при форматировании чисел.
Выравнивание справа
Предположим, что нам необходимо выровнять числа справа. Можно сделать это, используя вышеприведенный синтаксис, добавив к нему только элемент width.
Если нужно сделать 6 пробелов и выровнять текст справа, следует добавить width со значением 8 (по умолчанию текст выравнивается справа).
number = 20
>>> print(f'{number}')
20
>>> print(f'{number:8}')
20
>>> print(f'{number:>8}')
20
Для большей степени конкретизации добавьте символ >, который указывает, что текст должен быть выровнен справа.
Выравнивание слева
Теперь выровняем текст слева, используя _ в качестве символа-заполнителя.
number = 20
>>> print(f'{number:<8}')
20
>>> print(f'{number:_<8}')
20______
Чтобы закрепить width со значением 8, добавим 6 _, используя приведенный выше код.
Заполнение нулями
Пришло время использовать знания из предыдущего раздела для форматирования чисел путем заполнения их нулями слева/справа.
Заполнение нулями справа
Как демонстрировалось ранее, для форматирования строк в Python 3.6 используются символы-заполнители. В данном случае выберем 0 в качестве символа-заполнителя, чтобы указать, что в числе с плавающей точкой 5 десятичных знаков.
x = 20.123
>>> print(f'{x:0<8}')
20.12300
Иногда использование width усложняет ситуацию: приходится вычислять окончательное значение width числа после добавления 0.
Проще подумать о необходимом количестве десятичных знаков.
Сделаем это с помощью .precision на основе синтаксиса, показанного выше. Добавляем 0 до тех пор, пока в числе не будет 5 десятичных знаков.
>>> print(f'{x:.5f}')
20.12300
В приведенном выше коде 5 означает точность, а f — число с плавающей точкой.
Заполнение нулями слева
Теперь будем добавлять 0 слева. Это очень полезно, когда нужно создавать пользовательские форматы с использованием чисел.
Допустим, что нам нужно получить следующий формат: YYYYMMDD с использованием регулярных чисел 1–9. В этом случае нужно добавить 0 слева от месяца (month) и дня (day).
Вот 2 способа сделать это с помощью f-строк:
year = 2022
month = 1
day = 5
# YYYYMMDD
>>> print(f'{year}{month:0>2}{day:0>2}')
20220105
>>> print(f'{year}{month:02d}{day:02d}')
20220105
Округление числа с плавающей точкой
Округление до n десятичных знаков
Когда нужно округлить число с плавающей точкой до n десятичных дробей, полезно использовать .precision с f-типом.
Округлим приведенное ниже число до 1 знака после десятичной точки.
x = 20.123
>>> print(f'{x:.1f}')
20.1
Представление плавающих чисел в процентах
Теперь округлим число и добавим знак %.
x = 20.123
>>> print(f'{x:.1f}%')
20.1%
Использование запятой в качестве разделителя тысяч
Можно также добавить , (запятую) в качестве разделителя тысяч.
x = 1000000
>>> print(f'{x:,}')
1,000,000
Форматирование даты
И последнее, но не менее важное: можно импортировать datetime и использовать специальные символы внутри f-строки, чтобы получить правильное форматирование данных.
import datetime
now = datetime.datetime.now()
>>> print(f'Today is {now:%B} {now:%-d}, {now:%Y}')
Today is May 20, 2022
>>> print(f'{now=:%m-%d-%Y}')
now=05-20-2022
Здесь можно найти шпаргалку с большим количеством символов, которые применяются для форматирования переменных даты в Python.
Читайте также:
Перевод статьи Frank Andrade: A Simple Guide to String Formatting in Python Using f-strings