Ответ 1
%r
не является допустимым заполнителем в операциях форматирования str.format()
; он работает только в старом стиле %
форматировании строк. Он действительно преобразует объект в представление через функцию repr()
.
В str.format()
, !r
является эквивалентом, но это также означает, что теперь вы можете использовать все коды формата для строки, Обычно str.format()
вызывает метод object.__format__()
для самого объекта, но используя !r
, вместо этого используется repr(object).__format__()
.
Существуют также преобразователи !s
и (в Python 3) !a
; они сначала применяют функции str()
и ascii()
.
0
впереди указывает, какой аргумент для метода str.format()
будет использоваться для заполнения этого слота; позиционный аргумент 0
равен "Hello"
в вашем случае. Вы также можете использовать именованные аргументы и передавать объекты в качестве аргументов ключевого слова:
"{greeting!r:20}".format(greeting="Hello")
Если вы не используете Python 2.6, вы можете опустить это как слоты без индексов или имена автоматически пронумерованы; первый {}
равен 0
, второй {}
принимает второй аргумент в индексе 1
и т.д.