Вложены ли вложенные спецификации формата?

Недавно я встретил следующую странность. Вложенные поля {} -enclosed, похоже, работают как в Python 2.7, так и в 3.6, но я не могу найти что-либо в документах, чтобы сказать, что это так. Например, я получаю следующий результат как на 3.6, так и на 2.7:

>>> '{:{}.{}f}'.format(27.5, 6, 2)
' 27.50'

Кто-нибудь видел это раньше, и это намеченная функция? Обычно я отклоняю это как сложность реализации и, возможно, сообщаю об этом как об ошибке. Тем не менее, две вещи: документы Python не всегда содержат всю информацию в том месте, где я ее искал, и это очень привлекательная функция.

Ответы

Ответ 1

Это описано в конце введения в раздел "Синтаксис строки форматирования":

Поле format_spec также может включать в себя вложенные поля замены. Эти вложенные поля замены могут содержать имя поля, флаг преобразования и спецификацию формата, но глубина вложенности не допускается. Поля замены в формате format_spec заменяются до интерпретации строки format_spec. Это позволяет динамически определять форматирование значения.

Некоторые примеры этой функции также можно найти в конце раздела "Примеры форматов", например:

>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>