Метод format(), который определен у строк, позволяет форматировать строку, вставляя в нее на место плейсхолдеров определенные значения.
Для вставки в строку используются специальные параметры, которые обрамляются фигурными скобками ({}).
Именованные параметры
В форматируемой строке мы можем определять параметры, в методе format() передавать для этих параметров значения:
| 1 2 3 4 5 | text = "Hello, {first_name}.".format(first_name="Tom")print(text) # Hello, Tom. info = "Name: {name}\t Age: {age}".format(name="Bob", age=23)print(info) # Name: Bob Age: 23 |
Причем в метод формат аргументы определяются с тем же именем, что и параметры в строке. Так, если параметр называется first_name, как в первом случае, то аргумент, которому присваивается значение, также называется first_name.
Параметры по позиции
Мы также можем последовательно передавать в метод format набор аргументов, а в самой форматируемой строке вставлять эти аргумента, указывая в фигурных скобках их номер (нумерация начинается с нуля):
| 1 2 | info = "Name: {0}\t Age: {1}".format("Bob", 23)print(info) # Name: Bob Age: 23 |
При этом аргументы можно вставлять в строку множество раз:
| 1 | text = "Hello, {0} {0} {0}.".format("Tom") |
Подстановки
Еще один способ передачи форматируемых значений в строку представляет использование подстановок или специальных плейсхолдеров, на место которых вставляются определенные значения. Для форматирования мы можем использовать следующие плейсхолдеры:
- s: для вставки строк
- d: для вставки целых чисел
- f: для вставки дробных чисел. Для этого типа также можно определить через точку количество знаков в дробной части.
- %: умножает значение на 100 и добавляет знак процента
- e: выводит число в экспоненциальной записи
Общий синтаксис плейсхолдера следующий:
| 1 | {:плейсхолдер} |
В зависимости от плейсхолдера можно добавлять дополнительные параметры. Например, для форматирования чисел float можно использовать следующие параметры
| 1 | {:[количество_символов][запятая][.число_знаков_в_дробной_части] плейсхолдер} |
При вызове метода format в него в качестве аргументов передаются значения, которые вставляются на место плейсхолдеров:
| 1 2 3 4 | welcome = "Hello {:s}"name = "Tom"formatted_welcome = welcome.format(name)print(formatted_welcome) # Hello Tom |
В качестве результата метод format() возвращает новую отформатированную строку.
Форматирование целых чисел:
| 1 2 3 4 | source = "{:d} символов"number = 5target = source.format(number)print(target) # 5 символов |
Если форматируемое число больше 999, то мы можем указать в определении плейсхолдера, что мы хотим использовать запятую в качестве разделителя разрядов:
| 1 2 | source = "{:,d} символов"print(source.format(5000)) # 5,000 символов |
Для дробных чисел, то есть таких, которые представляют тип float, перед кодом плейсхолдера после точки можно указать, сколько знаков в дробной части мы хотим вывести:
| 1 2 3 4 5 | number = 23.8589578print("{:.2f}".format(number)) # 23.86print("{:.3f}".format(number)) # 23.859print("{:.4f}".format(number)) # 23.8590print("{:,.2f}".format(10001.23554)) # 10,001.24 |
Еще один параметр позволяет установить минимальную ширину форматируемого значения в символах:
| 12 | print("{:10.2f}".format(23.8589578)) # 23.86print("{:8d}".format(25)) # 25 |
Для вывода процентов лучше воспользоваться кодом “%”:
| 1 2 3 4 | number = .12345print("{:%}".format(number)) # 12.345000%print("{:.0%}".format(number)) # 12%print("{:.1%}".format(number)) # 12.3% |
Для вывода числа в экспоненциальной записи применяется плейсхолдер “e”:
| 1 2 3 4 | number = 12345.6789print("{:e}".format(number)) # 1.234568e+04print("{:.0e}".format(number)) # 1e+04print("{:.1e}".format(number)) # 1.2e+04 |
Форматирование без метода format
В принципе для форматирования значений мы можем обойтись и без метода format, применяя следующий синтаксис:
| 1 | строка%(параметр1, параметр2,..параметрN) |
То есть в начале идет строка, которая содержит те же плейсхолдеры, которые были рассмотрены выше (за исключением плейсхолдера %), после строки ставится знак процента %, а затем список значений, которые вставляются в строку. Фактически знак процента представляют операцию, в результате которой образуется новая строка:
| 1 2 | info = "Имя: %s \t Возраст: %d" % ("Tom", 35)print(info) # Имя: Tom Возраст: 35 |
Рядом с плейсхолдером указывается знак процента и в отличие от функции format здесь не требуются фигурные скобки.
Причем способы форматирования чисел здесь также применяются:
| 1 2 | number = 23.8589578print("%0.2f - %e" % (number, number)) # 23.86 - 2.385896e+01 |