#Слева указать спецификаторы после знака %, справа указать то, на что эти спецификаторы заменить
#d = десятичное число, s = строка
formating = "That's %d %s bird" % (1, "dead")
print(formating)

x = 1234
#%[(name)][flags][width][.precision]спец
# name = ключ в словаре. При указании * для width и precision значение возьмётся из элемента в списке входных значений
#-10 = отступ слева. при указании отриц. числа превращается в отступ справа
#06 = поле становится равным 6 и добавляются вводные нули вместо отсутпа
res = "integers: ...%d...%-10d...%06d" % (x, x, x)
print(res)

#f = вещественное число
#. используется для определения кол-ва знаков после запятой
res = "%f...%.2f" % (1/3.0, 1/3.0)
print(res)

#Использование словаря:
formating = "%(number)d %(text)s" % {"number" : 1, "text" : "spam"}
print("\n", formating)

#*****************************************Методы форматирования*****************************************

#Могут использоваться именованные аргументы или номера аргументов
template = "{motto}, {0} and {food}"
print(template.format("ham", motto="spam", food="eggs"))

import sys
#Для ссылки на объект в словаре необходимо указать положение словаря в списке входных значений (1) и ключ объекта в квадратных скобках [spam]
#Для ссылки на атрибут объекта нужно применить точку (.platform)
template = "My {1[spam]} runs {0.platform}".format(sys, {"spam": "laptop"})
print(template)

somelist = list("spam")
#Использование отрицательных значений внутри строки формата приводит к ошибке
#Также нельзя создавать срезы внутри строки формата
#Поэтому объект нужно указать вне строки.                          | 
template = "first = {0[0]}, last = {1}".format(somelist, somelist[-1])
print(template)

#Синтаксис точного форматирования: {fieldname!conversionflag:formatspec}
#Синтаксис formatspec: [[fill]align][sign][#][0][width][.precision][typecode] (В квадратных скобках необязательные компоненты)
#< = выравнивание слева, > = выравнивание справа
print("\n{0:>10} = {1:<10}".format("spam", 123.4567))

#Извлечение значения из списка аргументов:
print("{0:.{1}f}".format(3.14159, 2))