2015-02-09 5 views
0

Я изучаю метод использования метода format, и я нашел то, что я не понимаю. Когда я это сделаю:Метод строкового формата. Словари

>>> s = "My {comp[b]}" 
>>> s.format(comp = {'a': 'laptop', 'b': 'desktop'}) 
'My desktop' 

Получаю ожидаемые результаты. Но когда я пытаюсь определить словарь из метода, и просто используется имя внутри:

>>> comp = {'a': 'laptop', 'b': 'desktop'} 
>>> s = "My {comp[b]}" 
>>> s.format(comp) 

я KeyError: 'comp'. Зачем?

ответ

5

В вашем втором примере вы не называете параметр, который вы передаете, format. Ваша конечная строка должна быть:

>>> s.format(comp=comp) 
2

format отличает использование между позиционным и именованным аргументами.

Используя имя переменной внутри строки формата, вы должны указать именованный аргумент с этим конкретным именем. В первом вы, потому что вы звоните "".format(<name>=<var>), а во втором случае вы просто даете позиционный аргумент (позиция 0), который заполняется словарем comp.

Если вы прочли документацию, вы заметили, что формат может использовать позиционные аргументы таким образом: "Hello {0}!".format(<arg0>).

В вашем втором случае вместо указания нужного имени comp вы задаете аргумент позиции 0.

Смежные вопросы