Я хотел бы изменить во время выполнения, в Python, некоторые форматы печати, включая разделение запятыми - PullRequest
0 голосов
/ 21 мая 2019

У меня есть программа, которая работает в двух режимах - целочисленном и десятичном - определяется аргументом командной строки.

При работе в целочисленном режиме операторы печати выглядят следующим образом

        print(f'{next:,.0f}')

тогда как в десятичном режиме операторы печати выглядят следующим образом

        print(f'{next:,.2f}')

Так что если next = 21234.9234

, то результат равен 21 234 в целочисленном режиме и 21 234,92 в десятичном режиме.

Прямо сейчас каждый оператор печати кодируется следующим образом:

 if imode:
    print(f'{next:,.0f}')
 else:
    print(f'{next:,.2f}')

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

Если бы я не использовал разделение запятыми в качестве требования, то следующее будет делать то, что я хочу.

Я мог бы выполнить

 if imode:
   fmt='%.0f'
 else
   fmt='%.2f'

один раз, и тогда каждый оператор печати будет выглядетькак

 print(fmt %next)

Поскольку формат, используемый для разделения запятых, не так прост, как форматирование без разделения запятых, я не могу заставить работать подобный прием.

Есть ли какой-нибудь другой трюк, который сделает то, что я хочу?

1 Ответ

0 голосов
/ 21 мая 2019

Вместо imode вы, вероятно, могли бы просто использовать переменную, представляющую точность (т. Е. 0 или 2 в вашем случае), где это было бы так же просто, как написать:

print(f'{next:,.{precision}f}')

Учитывая ваши текущие настройки, хотя, попробуйте:

print(f'{next:,.{0 if imode else 2}f}')

(Кроме того, заголовки, далее - зарезервированное ключевое слово, поэтому избегайте его использования, если можете)

...