Две строки форматирования в одной только с одним значением

#python #python-3.x #formatting

#python #python-3.x #форматирование

Вопрос:

Я хочу иметь строку, в которой я могу отформатировать ее целым числом, чтобы она:

  1. Добавляет знак перед целым числом ( для положительных целых чисел, — для отрицательных целых чисел)
  2. Заключите подписанный int в круглые скобки (т.Е. с помощью ())
  3. Выровняйте int по левому краю с помощью круглых скобок слева, добавив при необходимости пробелы в конце.

Я знаю, как выполнить эти шаги по отдельности, но я не смог объединить их в одну строку.
Например, 1 и 2 были бы выполнены с помощью '({: d})'.format(3) , это привело бы к ( 3) .
3 выполняется для произвольной строки с помощью '{:<5}'.format(3) , это привело бы к 3 (4 завершающих пробела).

Моя цель — иметь единственную строку, к которой я могу обратиться .format только один раз, поэтому
format_string.format(3)
приведет к
( 3)
с одним конечным пробелом, чтобы длина строки составляла 5.

Возможно ли это?

Я пробовал ({{: d}:<5}) , но это не работает, поскольку он считает, что {: d} это имя поля для форматирования с <5 , что, очевидно, не так.
Я также изучал f-строки, но они не подходят для моего варианта использования, поскольку я вызываю .format строку форматирования позже, чем при ее создании.

Любая помощь была бы очень кстати!

Ответ №1:

Решение с одним вызовом для format :

 def special_format_int(n, SPACES=5):
    return '({: d})'.format(n).ljust(SPACES)
  

Комментарии:

1. Спасибо, но я надеялся, что есть способ вызывать только format. Можете ли вы придумать способ тогда?