новый стиль форматирования в python со словарями - PullRequest
0 голосов
/ 19 января 2019

Я изучаю Python и не понимаю что-то о «новом стиле» форматирования. Вот мой код:

>>> d={'n':32,'f':5.03,'s':'test string'}
>>> '{0[n]} {0[f]} {0[s]} {1}'.format(d, 'other')
'32 5.03 test string other'

но когда я набираю в консоли:

>>> d[n]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
>>> d['n']
32

Так почему в отформатированной строке 0 [n] без кавычек смог прочитать из словаря значение с ключом 'n' (в данном случае ключ является строкой), но когда я попробовал это в консоль, это не сработало.

Кроме того, что произойдет, если ключ не является строкой?

Спасибо

1 Ответ

0 голосов
/ 19 января 2019

'{0[n]}...' - это строка, которая интерпретируется методом format(). Синтаксический анализатор Python не заботится о содержимом этой строки, и format может использовать любую запись, независимо от того, что допустимо в Python, а что нет.

O[n] это не строка, это выражение Python. Когда Python анализирует его, он пытается преобразовать n в переменную, которая, в вашем случае, не существует. Ваша попытка сработает, если вы выполните n='n' перед поиском.

...