Предположим, что существует три способа указать, что какое-то внешнее выражение должно быть вставлено в строку, для которой вызывается метод format
:
- неявно, по позиции
'{}, {}, {}'.format('huey', 'dewey', 'louie')
дает 'huey, dewey, louie'
.
- Явно, по позиции
'{2}, {1}, {0}'.format('huey', 'dewey', 'louie')
дает 'louie, dewey, huey'
.
- Явно по имени
'{first}, {second}, {third}'.format(first='huey', second='dewey', third='louie')
дает 'huey, dewey, louie'
.
Напомним, что в Python аргументы ключевых слов и имена переменных не могут начинаться с цифры.
Это ограничение относится к нашей текущей ситуации: если бы были возможны такие ключевые аргументы, мы бы не смогли разрешить неоднозначность между случаями 2 и 3; {0}
должен ссылаться на первый элемент неназванных дополнительных аргументов или ключевое слово аргумента 0
?
Поскольку аргументы нестрокового ключевого слова не возможны, двусмысленности нет, а целое число в фигурных скобках всегда означает второй случай. Следовательно, в вашем коде {123}
фактически ссылается на 124-й элемент аргумента - tuple
, переданный в format
, и, конечно, такого элемента нет.
Для полноты давайте рассмотрим f-строки, представленные в Python 3.6:
insert_me = 'cake'
print(f'{insert_me}')
Выход:
cake
Мы не можем сделать это:
123 = 'cake' # illegal variable definition
print(f'{123}')
Следовательно, Python интерпретирует 123
в фигурных скобках как целочисленный литерал и печатает '123'
.