- Форматирование в Python с помощью format()
- Параметры format()
- Возвращаемое значение format()
- Как работает format()?
- Для позиционных аргументов
- Для аргументов-ключевых слов
- Базовое форматирование с format()
- Пример №1: базовое форматирование для аргументов по умолчанию, позиционных и аргументов-ключевых слов.
- Форматирование чисел с format()
- Типы форматирования чисел
- Пример №2: простое форматирование чисел.
- Пример №3: форматирование чисел с полями для целых и чисел с плавающей точкой.
- Пример №4: форматирование чисел со знаками.
- Форматирование чисел с выравниванием
- Форматирование чисел с выравниванием
- Пример №5: форматирование чисел с выравниванием по центру, левому и правому краю.
- Форматирование строк с format()
- Пример №6: форматирование строк с полями и выравниванием.
- Пример №7: обрезание строк.
- Форматирование элементов классов и словарей с format()
- Пример №8: форматирование элементов класса с format().
- Пример №9: форматирование элементов словаря с format().
- Аргументы как параметры в format()
- Пример №10: динамическое форматирование.
- Дополнительные параметры форматирования с format()
- Пример №11: форматирование по типу с format() и переопределение метода _format().
- Пример №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()?
Формат читает тип переданных аргументов и форматирует строку в соответствии с кодами форматирования в строке.
Для позиционных аргументов
Здесь Аргумент 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.
Для аргументов-ключевых слов
В этом примере используется то же выражение, чтобы продемонстрировать разницу в использовании позиционных и аргументов-ключевых слов.
Здесь вместо просто параметров использованы сочетания ключ-значение. А именно: 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 пустых местах слева.
- Если нужно заполнить оставшиеся места нулями, спецификатор может сделать и это. Это работает как для целых чисел, так и для чисел с плавающей точкой: и .
Пример №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