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

Содержание
  1. f-строки в Python
  2. 5 способов форматирования строк
  3. Погружене в f-строки
  4. Производительность
  5. Заключение
  6. Способы форматирования текстовых строк в Python.
  7. Форматирование строки для печати или логирования.
  8. Форматирование f-строками.
  9. Форматирование методом str.format() .
  10. Форматирование оператором ‘%’ в стиле языка C .
  11. Форматирование в Python с помощью format()
  12. Параметры format()
  13. Возвращаемое значение format()
  14. Как работает format()?
  15. Для позиционных аргументов
  16. Для аргументов-ключевых слов
  17. Базовое форматирование с format()
  18. Пример №1: базовое форматирование для аргументов по умолчанию, позиционных и аргументов-ключевых слов.
  19. Форматирование чисел с format()
  20. Типы форматирования чисел
  21. Пример №2: простое форматирование чисел.
  22. Пример №3: форматирование чисел с полями для целых и чисел с плавающей точкой.
  23. Пример №4: форматирование чисел со знаками.
  24. Форматирование чисел с выравниванием
  25. Форматирование чисел с выравниванием
  26. Пример №5: форматирование чисел с выравниванием по центру, левому и правому краю.
  27. Форматирование строк с format()
  28. Пример №6: форматирование строк с полями и выравниванием.
  29. Пример №7: обрезание строк.
  30. Форматирование элементов классов и словарей с format()
  31. Пример №8: форматирование элементов класса с format().
  32. Пример №9: форматирование элементов словаря с format().
  33. Аргументы как параметры в format()
  34. Пример №10: динамическое форматирование.
  35. Дополнительные параметры форматирования с format()
  36. Пример №11: форматирование по типу с format() и переопределение метода _format().

f-строки в Python

Начиная с версии 3.6 в Python появился новый тип строк — f-строки, которые буквально означают «formatted string». Эти строки улучшают читаемость кода, а также работают быстрее чем другие способы форматирования. F-строки задаются с помощью литерала «f» перед кавычками.

f-строки — это пятый способ (sic!) форматирования строк в Python, который очень похож на использование метода format().

Вспомним все 5 способов форматирования.

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

1. Конкатенация. Грубый способ форматирования, в котором мы просто склеиваем несколько строк с помощью операции сложения:

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

3. Template-строки. Этот способ появился в Python 2.4, как замена %-форматированию ( PEP 292 ), но популярным так и не стал. Поддерживает передачу значений по имени и использует $-синтаксис как в PHP.

4. Форматирование с помощью метода format(). Этот способ появился в Python 3 в качестве замены %-форматированию. Он также поддерживает передачу значений по позиции и по имени.

5. f-строки. Форматирование, которое появилось в Python 3.6 ( PEP 498 ). Этот способ похож на форматирование с помощью метода format(), но гибче, читабельней и быстрей.

Погружене в f-строки

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

f-строки также поддерживают расширенное форматирование чисел:

С помощью f-строк можно форматировать дату без вызова метода strftime():

Они поддерживают базовые арифметические операции. Да, прямо в строках:

Позволяют обращаться к значениям списков по индексу:

А также к элементам словаря по ключу:

Причем вы можете использовать как строковые, так и числовые ключи. Точно также как в обычном Python коде:

Вы можете вызывать в f-строках методы объектов:

А также вызывать функции:

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

Со всеми возможностя f-строк вы можете ознакомится в PEP498.

Производительность

F-строки не только гибкие, но и быстрые. И для сравнения производительности разных подходов к форматированию я подготовил два шаблона:

  • простой, в который нужно вставить всего два значения: строку и число;
  • сложный, данные для которого собираются из разных переменных, а внутри происходит преобразование даты, вещественного числа, а также округление.
Читайте также:  Genshin impact способы получения камней истока

Финальная простая строка получается такой:

Привет, меня зовут Дмитрий. Мне 27 лет.

Сложная строка на выходе такая:

Сегодня 24.02.2017.
Мы живём на планете Земля. Её радиус 6378 км., а масса 5.973e+24
Период обращения планеты вокруг Солнца 365 дней.

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

После недолгого тестирования я получил следующие результаты:

На простых примерах f-строки показывают самые лучшие результаты.
На 25% быстрее %-форматирования и метода format().

На сложных шаблонах f-строки ведут себя также как %-форматирование
(разница в пользу %-форматирования не превышает величину погрешности).
А вот относительно метода format() f-строки быстрее на 27%.

Заключение

Если вы используете Python 3.6 и старше, то самое время использовать f-строки — они гибкие и быстрые.

Источник

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

Форматирование строки для печати или логирования.

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

Форматирование f-строками.

Форматированные строковые литералы, также называемые «f-строками» для краткости, позволяют включать значение выражений Python в строку, добавляя префикс к строке ‘f’ или ‘F’ и записывая выражения внутри строки как .

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

Передача целого числа после ‘:’ символа приведет к минимальному количеству символов в этом поле. Это полезно для выравнивания столбцов.

Другие модификаторы могут использоваться для преобразования значения перед его форматированием. ‘!a’ применяется ascii() , ‘!s’ применяется str() и ‘!r’ применяется repr() :

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

Основное использование str.format() метода выглядит следующим образом:

Скобки и символы внутри них, называемые полями формата, заменяются объектами, переданными в метод str.format() . Число в скобках может использоваться для обозначения позиции объекта.

Если в методе str.format() используются ключевые аргументы, на их значения ссылается имя аргумента.

Если строка формата очень длинная, которую не хотите разделять, было бы неплохо, если бы вы могли ссылаться на переменные, которые должны быть отформатированы по имени, а не по позиции. Это можно сделать, передавая словарь dict и используя квадратные скобки ‘[]’ для доступа к ключам.

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

Это особенно полезно в сочетании со встроенной функцией vars() , которая возвращает словарь, содержащий все локальные переменные.

Как пример, следующий код производит аккуратно выровненный набор столбцов, дающих целые числа и их квадраты и кубы:

Форматирование оператором ‘%’ в стиле языка C .

Оператор ‘%’ также может использоваться для форматирования строк. Он интерпретирует левый аргумент так же, как строку формата sprintf() языка C , применяемую к правому аргументу и возвращает строку, полученную в результате этой операции форматирования. Например:

Дополнительную информацию по данному способу форматирования можно найти в разделе «Форматирование строк в стиле printf «.

Источник

Форматирование в Python с помощью format()

Строковый метод format() форматирует строки python для более красивого вывода.

Здесь p0, p1. — это позиционные аргументы, а k0, k1. — аргументы-ключевые слова со значениями v0, v1. соответственно.

А template — это набор строк с заполнителями для аргументов.

Параметры format()

Метод format() принимает любое количество параметров. Но они делятся на два вида:

  • Позиционные аргументы — список параметров, доступ к которым можно получить по индексу параметра в фигурных скобках <индекс>.
  • Параметры — ключевые слова — список параметров типа ключ=значение, доступ к которым можно получить с помощью ключа параметра в фигурных скобках <ключ>.

Возвращаемое значение format()

Метода format() возвращает отформатированную строку.

Как работает format()?

Формат читает тип переданных аргументов и форматирует строку в соответствии с кодами форматирования в строке.

Для позиционных аргументов

Здесь Аргумент 0 — это строка “Adam”, а Аргумент 1 — число с плавающей точкой 230.2346.

Список аргументов в Python начинается с 0.

Строка Hello <0>, your balance is <1:9.3f>— это шаблон строки. Он содержит коды форматирования.

Фигурные скобки — это всего лишь заполнители, которые будут заменены аргументами. В примере выше <0>— это заполнитель для «Adam» , а <1:9.3f>— для 230.2346 .

Поскольку шаблон строки ссылается на аргументы format() ( <0>и <1>), они являются позиционными аргумента. На них можно ссылаться без использования чисел, а Python конвертирует <> в числа автоматически.

  • Поскольку «Adam» — это нулевой аргумент, он располагается в позиции <0>. Поскольку <0>не содержит других кодов форматирования, дополнительные операции не осуществляются.
  • Но в случае с первым аргументом, 230.2346 , ситуация другая. <1:9.3f>размещает 230.2346 на нужно месте и выполняет операцию 9.3f .
  • f определяет, что это формат числа с плавающей точкой. Если указать неправильно, будет ошибка.
  • Часть до точки (9) определяет минимальную ширину, которую может занимать число 230.2346. В этом случае числу 230.2346 выделены 9 мест с точкой.
    Если параметр выравнивания не указан, то он выравнивается вправо до оставшихся позиций (для строк — влево).
  • Часть после точки (3) урезает десятичную часть (2346) до указанной числа. В этом случае 2346 может занимать три места. Остаток (46) округляется и выходит 235.

Для аргументов-ключевых слов

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

Здесь вместо просто параметров использованы сочетания ключ-значение. А именно: name=»Adam» и blc=230.2346 .

Поскольку ссылка на эти параметры происходит через ключи ( и ) — это именованные аргументы.

Что происходит внутри:

  • Заполнитель заменяется значением ключа name — “Adam”. Никаких дополнительных операций здесь нет.
  • В случае с аргументом blc=230.2346 заполнитель заменяется на значение 230.2346 . Но перед заменой производится операция 9.3f .
    Вывод — “230.235”. Десятичная часть обрезается после трех позиций, а оставшиеся цифры округляются. Общая ширина — 9, а два символа остаются справа.

Базовое форматирование с format()

Метод format() позволяет использовать простые заполнители для форматирования.

Пример №1: базовое форматирование для аргументов по умолчанию, позиционных и аргументов-ключевых слов.

При запуске программы вывод будет одинаковым:

При использовании смешанных аргументов аргументы-ключевые слова должны идти после позиционных аргументов.

Форматирование чисел с format()

С помощью спецификаторов формата можно форматировать и числа:

Типы форматирования чисел

Тип Значение
d Десятичное число
c Соответствующий символ Unicode
b Двоичный формат
o Восьмеричный формат
x Шестнадцатеричный формат (в нижнем регистре)
X Шестнадцатеричный формат (в верхнем регистре)
n То же, что и d , но использует местную настройку для разделения числа
e Экспоненциальная запись (e в нижнем регистре)
E Экспоненциальная запись (E в верхнем регистре)
f Отображать фиксированное количество знаков (по умолчанию 6)
F То же, что и f , только отображает inf как INF , а nan как NAN
g Общий формат. Округляет число до p значащих цифр (Точность по умолчанию: 6)
G То же, что и g . Но переключается к E , если число очень большое
% Проценты. Делит на 100 и добавляет % в конце

Пример №2: простое форматирование чисел.

При запуске этой программы вывод будет следующий:

Пример №3: форматирование чисел с полями для целых и чисел с плавающей точкой.

Эта программа выдаст следующее:

  • В первой инструкции <:5d>принимает целое число в качестве аргумента и задает минимальную ширину 5. Поскольку настройка выравнивания не задана, оно выравнивается к правому краю.
  • Во втором ширина (2) меньше, чем размер числа (1234), поэтому слева не появляется свободное пространство, но число и не обрезается.
  • В отличие от целых чисел у чисел с плавающей точкой есть целая и десятичная части. Минимальная ширина в этом случае включает обе из них и точку.
  • В третьем выражении <:8.3f>обрезает десятичную часть, округляя ее до 2 цифр. И число, теперь 12.235, занимает 8 позиций, оставляя 2 пустых местах слева.
  • Если нужно заполнить оставшиеся места нулями, спецификатор может сделать и это. Это работает как для целых чисел, так и для чисел с плавающей точкой: <:05d>и <:08.3f>.

Пример №4: форматирование чисел со знаками.

Вывод будет следующий:

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

Операторы , ^ , > и = используются для выравнивания в том случае, если указана конкретная ширина.

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

Тип Значение
Выравнивается по правому краю
= Сдвигает знаки (+ или -) к левой позиции

Пример №5: форматирование чисел с выравниванием по центру, левому и правому краю.

Вывод этой программы:

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

Форматирование строк с format()

Как и числа, строки можно форматировать с помощью format() .

Пример №6: форматирование строк с полями и выравниванием.

При запуске программы вывод будет следующим:

Пример №7: обрезание строк.

Вывод будет следующим:

Форматирование элементов классов и словарей с format()

Python использует getattr() для элементов класса в форме “.age”. А __getitem__() — для элементов словаря в форме “[index]”.

Пример №8: форматирование элементов класса с format().

Вывод этой программы:

Здесь объект Person передается как аргумент-ключевое слово p .

В шаблоне строки получают доступ к значениям name и age с помощью .name и .age .

Пример №9: форматирование элементов словаря с format().

По аналогии с классом словарь person передается в качестве аргумента-ключевого слова p .

В шаблоне строки доступ к name и age получают с помощью [name] и [age] .

Есть и более простой способ форматировать словари в Python с помощью str.fromat(**mapping) .

* — это параметр формата (минимальная ширина поля).

Аргументы как параметры в format()

Параметры, такие как точность, выравнивание или символы заполнения можно передавать в качестве позиционных аргументов-ключевых слов.

Пример №10: динамическое форматирование.

  • В первом пример “cat” — это позиционный аргумент, который будет отформатирован. Аналогично fill=’*’ , align=’^’ и width=5 являются аргументами-ключевыми словами.
  • В шаблоне строки эти аргументы извлекаются не как обычные строки для вывода, а как коды форматирования: fill , align и width .
    Эти аргументы заменяют соответствующие заполнители, а строка “cat” соответствующим образом форматируется.
  • Во втором примере 123.236 — это позиционный аргумент, а align , with и precision передаются в шаблон в качестве параметров форматирования.

Дополнительные параметры форматирования с format()

format() также поддерживает форматирования по типам, например, для datetime или форматирование сложных чисел. Он внутренне вызывает __format__() для datetime и получает доступ к атрибутам сложных чисел.

Можно запросто переопределить метод __format__() для любого объекта для создания собственного форматирования.

Пример №11: форматирование по типу с format() и переопределение метода _format().

  • Для datetime:
    Текущий объект datetime передается в качестве позиционного аргумента методу format() . С помощью метода __format__() format() получает доступ к году, месяцу, дню, часу, минутам и секундам.
  • Для сложны чисел:
    1+2j конвертируется в объект ComplexNumber.
    Затем через доступ к атрибутам real и imag числа форматируются.
  • Переопределение format():
    Как и с datetime можно перезаписать метод __format__() для собственного форматирования, которое вернет возраст при попытке получить доступ через <:age>.

Также можно использовать функциональность __str__() и __repr__() объекта с условными обозначениями и format() .

Как и __format__() можно запросто переопределять метода __str__() и __repr__() объекта.

Источник

Читайте также:  Eset nod32 способы обновления
Оцените статью
Разные способы