Списки — единственная разновидность сложных объектов Python, рассмотренных до настоящего момента, но repr может использоваться для получения стро кового пред-ставления практически любых объектов Python. Чтобы убедиться в этом, попробуйте вызвать repr для встроенного сложного объекта — функции Python: >>> repr(len)
''
Python не выдает строку с кодом реализации функции len , но по крайней мере возвращает строку — — с описанием функции. Если вы опробуете функцию repr для каждого типа данных Python (словари, кортежи, классы и т. д.), упоминаемого в книге, вы увидите, что независимо от типа объекта Python вы получите строку, которая содержит некоторую информацию об объекте. Эта возможность очень полезна для отладки программ. Если вы сомневаетесь в том, какие данные хранятся в переменной в определенной точке программы, используйте функцию repr и выведите содержимое этой переменной. Итак, теперь вы знаете, как Python может преобразовать любой объект в строку с описанием этого объекта. По правде говоря, Python может сделать это двумя способами. Функция repr всегда возвращает то, что можно назвать формальным строковым представлением объекта Python. Если говорить конкретнее, repr воз-вращает строковое представление объекта Python, по которому можно восстановить исходный объект. Для больших сложных объектов это может быть не тот результат, который вам хотелось бы видеть в отладочном выводе или в отчетах состояния. Python также предоставляет встроенную функцию str . В отличие от repr , str выводит печатные строковые представления и может применяться к любым объ-ектам Python. str возвращает то, что можно назвать неформальным строковым представлением объекта. Строка, возвращаемая str , не обязана определять объект полностью; она предназначена для чтения человеком, а не кодом Python. Когда вы начнете пользоваться repr и str , вы не заметите никаких различий между ними, потому что до того, как вы начнете пользоваться объектно-ориентированными возможностями Python, никаких различий нет. При вызове для любого встроенного объекта Python str всегда вызывает repr для получения результата. Только когда
вы начнете определять собственные классы, различия между str и repr начинают играть важную роль (глава 15).
Зачем говорить об этом сейчас? Я хочу, чтобы вы знали, что вызов repr делает нечто большее, чем простой отладочный вывод ( print ). Возьмите в привычку использо-вать str вместо repr при создании строк для вывода информации — этот вариант предпочтителен по соображениям стиля программирования.
6.6. Использование метода format
Форматирование строк в Python 3 может осуществляться двумя способами. Бо-лее новый способ основан на использовании метода format класса строки. Метод format объединяет форматную строку, содержащую поля-заменители в фигурных скобках { } , со значениями, взятыми из параметров команды format . Если по-
требуется включить в строку литерал { или } , удвойте его ( {{ или }} ). Команда format предоставляет мощный мини-язык форматирования строк, дающий почти бесконечные возможности для управления форматированием строк. С другой стороны, в большинстве стандартных ситуаций он достаточно прост в использова-нии, поэтому в этом разделе будут рассмотрены некоторые шаблоны. Если же вам потребуются нетривиальные возможности, обращайтесь к разделу, посвященному форматированию строк, в документации стандартной библиотеки.
6.6.1. Метод format и позиционные параметрыПростой способ использования строкового метода format связан с заменой нуме-рованных полей, соответствующих параметрам, переданным функции format : >>> "{0} is the {1} of {2}".format("Ambrosia", "food", "the gods") 'Ambrosia is the food of the gods'
>>> "{{Ambrosia}} is the {0} of {1}".format("food", "the gods") '{Ambrosia} is the food of the gods'
Следует заметить, что метод format применяется к форматной строке, которая также может быть строковой переменной . Символы { } экранируются удваиванием, чтобы они не интерпретировались как признак поля-заменителя . Пример содержит три поля-заменителя — {0} , {1} и {2} , — которые последовательно заменяются первым, вторым и третьим параметрами. Где бы в форматной строке ни размещалось поле {0} , оно всегда замещается первым параметром, и т. д. Также можно использовать именованные параметры.
6.6.2. Метод format и именованные параметрыМетод format также распознает именованные параметры и поля замены: >>> "{food} is the food of {user}".format(food="Ambrosia", ... user="the gods")
'Ambrosia is the food of the gods'
В этом случае параметр выбирается по совпадению имени поля-заменителя с име-нем параметра, переданного команде format .
Читать дальше