Единственное, что вы должны понять, что {0}
относится к первому (нулевому) неназванным argume nt отправлено в format()
. Мы можем видеть, что это дело, удалив все неназванные ссылки и пытается использовать линейную заливку-в:
>>> "{motto}".format("boom")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'motto'
Вы ожидали бы, что «бум» будет заполнить «девиза», если это то, как он работает. Но вместо этого format()
ищет параметр с именем 'девиз'. Ключевым намеком здесь является KeyError
. Точно так же, если бы это было просто принимать последовательность параметров, переданные format()
, то это будет не ошибка, либо:
>>> "{0} {1}".format('ham', motto='eggs')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
Здесь format()
ищет второй безымянный аргумент в списке параметров - но это Безразлично» t, поэтому он получает ошибку «кортеж индекса вне диапазона». Это просто разница между неназванными (которые являются позиционно чувствительными) и именованными аргументами, переданными в Python.
See this post to understand the difference between these types arguments, known as 'args' and 'kwargs'.
Я думаю, вы просто сбиваете с толку себя. То, что вы сказали, правильно. «ham» - индексный ноль, который заменяет «{0}». Таким образом, '{motto}, {0} и {food}' -> '{motto}, ветчина и {еда}'. – kojiro
«Я интерпретирую« ветчину »как заполняющую маркер места формата с нулевым индексом» - нет, он заполняет заполнитель нулем в нем. – user2357112
Взгляните на [pyformat.info] (https://pyformat.info). –