2017-01-25 1 views
0

Я люблю вариант нового формата для строк, содержащих переменные, но я хотел бы иметь переменную, которая задает точность из моего сценария, и я не уверен, как это сделать , Позвольте мне привести небольшой пример:Как установить переменную точность для новой опции формата python

a = 1.23456789 
out_str = 'a = {0:.3f}'.format(a) 
print(out_str) 

Теперь это то, что я хотел бы сделать в псевдокоде:

a = 1.23456789 
some_precision = 5 
out_str = 'a = {0:.(some_precision)f}'.format(a) 
print(out_str) 

, но я не уверен, если это возможно, и если это возможно, как синтаксис будет выглядеть.

ответ

8

Вы можете гнездо заполнители, где гнездились заполнители могут быть использованы в любом месте в спецификации формата:

out_str = 'a = {0:.{some_precision}f}'.format(a, some_precision=some_precision) 

Я использовал именованный заполнитель, но вы можете использовать пронумерованные слоты тоже:

out_str = 'a = {0:.{1}f}'.format(a, some_precision) 

Также поддерживается автозапуск для вложенных слотов (Python 2.7 и выше); нумерация по-прежнему осуществляется слева направо:

out_str = 'a = {0:.{}f}'.format(a, some_precision) 

Вложенные слоты заполнены первыми; текущая реализация позволяет гнездовые заполнителям до 2-й уровней, поэтому использование заполнителей в заполнителях заполнителей не работает:

>>> '{:.{}f}'.format(1.234, 2) 
'1.23' 
>>> '{:.{:{}}f}'.format(1.234, 2, 'd') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Max string recursion exceeded 

Вы также не можете использовать заполнители в имени поля (так что нет динамического распределения значений к слотам).

2

Или вы можете использовать нумерацию.

a = 1.23456789 
some_precision = 5 
out_str = 'a = {0:.{1}f}'.format(a,some_precision) 
print(out_str) 

Ouptut:

a = 1.23457 
Смежные вопросы