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

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

Форматирование в 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__() объекта.

Источник

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-строки не только гибкие, но и быстрые. И для сравнения производительности разных подходов к форматированию я подготовил два шаблона:

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

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

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

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

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

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

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

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

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

Заключение

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

Источник

Форматирование строк в Python: format() и f-строки

Давайте поговорим про форматирование строк в Python. Этот язык предоставляет несколько вариантов форматирования. Мы разберем метод str.format() , f-строки и «шаблонные» строки.

Но для начала давайте посмотрим, что считается «старым способом» форматирования.

Что такое форматирование строк в Python с помощью %?

Раньше форматирование строк происходило при помощи оператора % .

Вот основной синтаксис данного оператора:

Вы можете создать строку и использовать %s внутри нее. %s здесь играет роль плейсхолдера. Дальше вы можете написать значок % , а затем – фактическое строковое значение, которое хотите использовать. Это значение в результате вставится на место плейсхолдера.

Вот базовый пример использования форматирования строки с помощью % .

Этот метод часто называют старым, потому что Python 3 представил метод str.format() , а также f-строки.

Что такое метод str.format() в Python?

Вот основной синтаксис данного метода:

Внутри строки мы можем использовать фигурные скобки <> . Они играют роль плейсхолдеров для аргументов. Аргументы – это значения, которые будут подставлены в строку.

В этом примере мы хотим напечатать «Hello, my name is Jessica. I am a musician turned programmer.»

В строке у нас будет всего три пары фигурных скобок. Они выступят в роли плейсхолдеров для значений Jessica , musician и programmer .

Внутри скобок для str.format() мы будем использовать значения Jessica , musician и programmer следующим образом:

Таким образом, целиком наш код будет выглядеть так:

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Позиционные аргументы

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

В этом примере метод .format() имеет два аргумента: «trumpet» и «drums» .

Мы можем получить доступ к этим значениям внутри строки, обратившись к ним по индексам. <0>относится к первому аргументу ( «trumpet» ), а <1>— ко второму ( «drums» ).

Вот наш полный код и предложение, которое будет выведено на экран:

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

Именованные аргументы

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

В следующем примере у нас есть два ключа: organization и adjective . Мы пропишем их внутри строки:

Метод .format() в качестве аргументов получает пары ключ-значение:

Целиком наш код будет выглядеть следующим образом:

Как смешивать именованные и позиционные аргументы

В str.format() вы можете использовать и именованные, и позиционные аргументы одновременно.

В этом примере мы собираемся написать небольшой рассказ о поездке в Диснейленд.

Сначала мы создадим несколько переменных для имени, числа, прилагательного и аттракциона Диснейленда.

Затем мы создадим нашу строку, используя различные аргументы. Также добавим \n , чтобы компьютер создавал новую строку после каждого предложения.

Внутри скобок в методе str.format() мы присвоим ключам name , adjective , hours и disney_ride в качестве значений наши переменные.

<0>будет иметь значение Disneyland .

Полностью наш код выглядит так:

Запустив его, мы получим следующий результат:

Что такое f-строки?

Форматированные строковые литералы (или f-строки) позволяют включать выражения прямо внутри ваших строк. Непосредственно перед строкой вы помещаете f или F . Это сообщает компьютеру, что вы хотите использовать f-строку.

Вот так выглядит основной синтаксис:

Вот простой пример, который поможет нам вывести на экран предложение Maria and Jessica have been friends since grade school .

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

Результаты последних двух примеров абсолютно идентичны:

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

Давайте рассмотрим следующий пример. У нас есть словарь. В нем представлены лучшие позиции мужских баскетбольных команд колледжей и количество выигранных ими игр из возможных 32.

При помощи цикла for и словарного метода items() можно просмотреть каждую из пар «ключ-значение» словаря rankings .

Внутри цикла for мы можем использовать f-строку для форматирования выводимых результатов.

Использование двоеточия в и указывает компьютеру создать поле шириной 10 символов. Так мы получим ровные столбцы для наших данных.

Буква d внутри < score: 10d>обозначает десятичное целое число.

Соберем наш код и получим следующую программу:

Теперь давайте запустим её. Вот, что у нас получится:

Что такое «шаблонные» строки?

«Шаблонные» строки – это строки в Python, которые используют плейсхолдеры для реальных значений.

Вот основной синтаксис такой строки:

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

В этом примере мы хотим напечатать I love to learn with Pythonist! , используя шаблонные строки.

Чтобы их использовать, сначала нужно импортировать класс Template из стандартной библиотеки string .

Затем мы можем использовать класс Template и указать строку внутри скобок. Мы поставим знак доллара $ перед именем. Позже $name заменится реальным значением.

Затем мы добавляем .substitute() к шаблону и присваиваем name значение Pythonist .

Таким образом, мы получили следующий код:

Заключение

Форматирование строк в Python можно осуществлять по-разному.

Более старый способ форматирования заключался в использовании оператора % .

%s действует как плейсхолдер для реального значения. Вы помещаете реальное значение после оператора % .

Этот метод часто называют старым, потому что Python 3 представил метод str.format() и f-строки.

В методе str.format() вы используете фигурные скобки для плейсхолдеров и круглые — для реальных значений. Этот метод может принимать именованные и позиционные аргументы.

«template string <>«.format(arguments)

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

Вы также можете использовать шаблонные строки, импортировав класс Template из стандартной библиотеки. Шаблонные строки – это строки Python, которые используют плейсхолдеры для реальных значений.

Мы надеемся, что эта статья оказалась для вас полезной, и желаем удачи в вашем путешествии в мире Python!

Источник

Читайте также:  Способ познания мира образно чувственное восприятие действительности
Оцените статью
Разные способы