Python string formatting with format

Содержание
  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. Пример №12: условные обозначения str() и repr() (!r и !s) с format().

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

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

template.format(p0, p1, ..., k0=v0, k1=v1, ...) 

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

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

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

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

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

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

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

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

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

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

format() для позиционных аргументов

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

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

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

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

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

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

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

format() для аргументов-ключевых слов

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

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

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

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

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

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

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

# аргументы по умолчанию print("Hello <>, your balance is <>.".format("Adam", 230.2346)) # позиционные аргументы print("Hello , your balance is .".format("Adam", 230.2346)) # аргументы ключевые слова print("Hello , your balance is .".format(name="Adam", blc=230.2346)) # смешанные аргументы print("Hello , your balance is .".format("Adam", blc=230.2346)) 

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

Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. 

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

Форматирование чисел с 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: простое форматирование чисел.

# целочисленные аргументы print("The number is:".format(123)) # аргументы с плавающей точкой print("The float number is:".format(123.4567898)) # восьмеричный, двоичный и шестнадцатеричный формат print("bin: , oct: , hex: ".format(12)) 

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

The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c 

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

# целые числа с минимальной шириной print("".format(12)) # ширина не работает для чисел длиннее заполнения print("".format(1234)) # заполнение для чисел с плавающей точкой print("".format(12.2346)) # целые числа с минимальной шириной, заполненные нулями print("".format(12)) # заполнение для чисел с плавающей запятой, заполненных нулями print("".format(12.2346)) 

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

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

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

# показать знак + print(" ".format(12.23, -12.23)) # показать знак - print(" ".format(12.23, -12.23)) # показать место для знака + print(" ".format(12.23, -12.23)) 
+12.230000 -12.230000 12.230000 -12.230000 12.230000 -12.230000 

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

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

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

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

# целые числа с выравниванием по правому краю print("".format(12)) # числа с плавающей точкой с выравниванием по центру print("".format(12.2346)) # выравнивание целого числа по левому краю заполнено нулями print("".format(12)) # числа с плавающей точкой с выравниванием по центру print("".format(-12.2346)) 

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

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

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

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

# отступ строки с выравниванием по левому краю print("".format("cat")) # отступ строки с выравниванием по правому краю print("5>".format("cat")) # заполнение строк с выравниванием по центру print("".format("cat")) # заполнение строк с выравниванием по центру # и '*' - символ заполнения print("".format("cat")) 

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

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

# обрезание строк до 3 букв print(".".format("caterpillar")) # обрезание строк до 3 букв и заполнение print(".".format("caterpillar")) # обрезание строк до 3 букв, # заполнение и выравнивание по центру print(".".format("caterpillar")) 

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

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

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

# определяем класс Person class Person: age = 23 name = "Adam" # форматирование возраста print("'s age is: ".format(p=Person())) 

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

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

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

# объявляем словарь person person = 'age': 23, 'name': 'Adam'> # форматирование возраста print("'s age is: ".format(p=person)) 

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

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

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

# объявляем словарь person person = 'age': 23, 'name': 'Adam'> # форматирование возраста print("'s age is: ".format(**person)) 

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

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

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

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

# динамический шаблон формата строки string = ">" # передача кодов формата в качестве аргументов print(string.format('cat', fill='*', align='^', width=5)) # динамический шаблон формата float num = "<:.f>" # передача кодов формата в качестве аргументов print(num.format(123.236, align=', width=8, precision=2)) 
  • В первом пример “cat” — это позиционный аргумент, который будет отформатирован. Аналогично fill=’*’ , align=’^’ и width=5 являются аргументами-ключевыми словами.
  • В шаблоне строки эти аргументы извлекаются не как обычные строки для вывода, а как коды форматирования: fill , align и width .
    Эти аргументы заменяют соответствующие заполнители, а строка “cat” соответствующим образом форматируется.
  • Во втором примере 123.236 — это позиционный аргумент, а align , with и precision передаются в шаблон в качестве параметров форматирования.

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

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

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

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

import datetime # datetime форматирование date = datetime.datetime.now() print("It's now: ".format(date)) # форматирование комплексных чисел complexNumber = 1+2j print("Real part: and Imaginary part: ".format(complexNumber)) # пользовательский метод __format__() class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: ".format(Person())) 
It's now: 2020/01/18 12:19:24 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 
  • Для datetime:
    Текущий объект datetime передается в качестве позиционного аргумента методу format() . С помощью метода __format__() format() получает доступ к году, месяцу, дню, часу, минутам и секундам.
  • Для сложны чисел:
    1+2j конвертируется в объект ComplexNumber.
    Затем через доступ к атрибутам real и imag числа форматируются.
  • Переопределение format():
    Как и с datetime можно перезаписать метод __format__() для собственного форматирования, которое вернет возраст при попытке получить доступ через .

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

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

Пример №12: условные обозначения str() и repr() (!r и !s) с format().

# __str__() и __repr__() сокращенно !r и !s print("Quotes: , Without Quotes: ".format("cat")) # реализация для класса __str__() и __repr__() class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: , str: ".format(p=Person())) 
Quotes: 'cat', Without Quotes: cat repr: REPR, str: STR 

Источник

Оцените статью