Допускается использование позиционных параметров вместе с именованными; в этих параметрах можно даже обращаться к атрибутам и элементам: >>> "{0} is the food of {user[1]}".format("Ambrosia", ... user=["men", "the gods", "others"])
'Ambrosia is the food of the gods'
В данном случае первый параметр является позиционным, тогда как обозначение user[1] относится ко второму элементу именованного параметра user .
6.6.3. Спецификаторы формата
Спецификаторы формата позволяют задать результат форматирования с еще большей точностью и широтой возможностей, чем форматные последовательности в старом стиле форматирования строк. Спецификатор формата позволяет задать символ-заполнитель, тип выравнивания, знак, ширину, точность и тип данных при подстановке на место поля-заменителя. Как упоминалось ранее, синтаксис специ-фикаторов формата представляет отдельный мини-язык, слишком сложный для того, чтобы полностью описывать его здесь. Тем не менее несколько примеров дадут вам представление о его возможностях:
>>> "{0:10} is the food of gods".format("Ambrosia") 'Ambrosia is the food of gods'
>>> "{0:{1}} is the food of gods".format("Ambrosia", 10) 'Ambrosia is the food of gods'
>>> "{food:{width}} is the food of gods".format(food="Ambrosia", width=10) 'Ambrosia is the food of gods'
>>> "{0:>10} is the food of gods".format("Ambrosia") ' Ambrosia is the food of gods'
>>> "{0:&>10} is the food of gods".format("Ambrosia") '&&Ambrosia is the food of gods'
:10 — спецификатор, который определяет поле шириной в 10 пробелов, дополня-емое пробелами . :{1} получает ширину из второго параметра . :>10 включает выравнивание поля по правому краю с дополнением пробелами . :&>10 включает выравнивание по правому краю с дополнением символами & вместо пробелов .
БЫСТРАЯ.ПРОВЕРКА:.МЕТОД.FORMAT()
Что будет содержать переменная x при выполнении следующих фрагментов кода?
x = "{1:{0}}".format(3, 4)
x = "{0:$>5}".format(3)
x = "{a:{b}}".format(a=1, b=5)
x = "{a:{b}}:{0:$>5}".format(3, 4, a=1, b=5, c=10)
6.7. Форматирование строк с символом %В этом разделе рассматривается форматирование строк с использованием опера-тора % . Этот оператор используется для объединения значений Python в отформа-тированные строки для печати или иного применения. Пользователи C отметят неожиданное сходство с семейством функций printf . Применение % для формати-рования строк относится к старому стилю форматирования, но я рассматриваю его здесь, потому что этот стиль считался стандартным в предыдущих версиях Python. Вы с большой вероятностью увидите его в коде, портированном из более ранних версий Python или написанном программистами, знакомыми с этими версиями. В новом коде этот стиль форматирования не должен использоваться, потому что он обречен на вымирание и в будущем будет удален из языка. Пример: >>> "%s is the %s of %s" % ("Ambrosia", "food", "the gods")'Ambrosia is the food of the gods'
Строковый оператор % (выделенный жирным шрифтом знак % в середине, а не три предшествующих экземпляра %s ) работает с двумя частями: в левой части разме-щается строка, а в правой кортеж. Оператор % ищет в левой строке специальные форматные последовательности и строит новую строку, заменяя эти форматные последовательности значениями из правой части. В этом примере форматными по-следовательностями в левой части являются три экземпляра %s , которые означают «Здесь вставляется строка».
При передаче разных значений в правой части будут получены разные строки: >>> "%s is the %s of %s" % ("Nectar", "drink", "gods") 'Nectar is the drink of gods'
>>> "%s is the %s of the %s" % ("Brussels Sprouts", "food", ... "foolish")
'Brussels Sprouts is the food of the foolish'
К элементам кортежа в правой части, соответствующим спецификаторам %s , авто-матически применяется str , так что они не обязаны быть строками: >>> x = [1, 2, "three"]
>>> "The %s contains: %s" % ("list", x)
"The list contains: [1, 2, 'three']"
6.7.1. Использование форматных последовательностейВсе форматные последовательности представляют собой подстроки, содержащиеся в строке в левой части от центрального оператора % . Каждая форматная последо-вательность начинается со знака % , и за ней следует один или несколько символов, которые показывают, что должно быть подставлено на место форматной последо-вательности и как должна выполняться подстановка. Форматная последователь-ность %s , использованная выше, является простейшей форматной последователь-ностью, она означает, что на место %s должна быть подставлена соответствующая строка из кортежа в правой части.
Возможны и другие, более сложные форматные последовательности. Следующая последовательность задает ширину поля (общее количество символов) выво-димого числа равной 6, задает количество символов в дробной части равным 2 и выравнивает число по левому краю в пределах поля. В следующем примере эта форматная последовательность заключается в угловые скобки, чтобы вы видели, где в форматной строке вставляются дополнительные пробелы: >>> "Pi is