Использование f-строки с форматом в зависимости от условия
Как я могу использовать f-строку с логикой для форматирования int
как float
? Я хотел бы, если ppl
является True
отформатировать num
до 2 десятичных знаков, и если ppl
является False
отформатировать его как есть.
Что-то вроде string = f'i am {num:.2f if ppl else num}'
но это не работает. Приведенный ниже код демонстрирует поведение, которого я хочу добиться с помощью более простой f-строки, если это возможно:
ppl = True
num = 3
string = f'I am {num:.2f}' if ppl else f'I am {num}'
print(string)
#if ppl False
#=> i am 3
#if ppl True
#=> i am 3.00
2 ответа
Вы можете вкладывать выражения для оценки внутри выражений в виде f-строки. Это означает, что вы можете перемещать троичную часть прямо внутри вашей струны:
string = f'I am {num:{".2f" if ppl else ""}}'
Обратите внимание на дополнительную пару скобок, необходимых для вложения.
Но я не думаю, что это чище. Лично мне труднее разобрать, что здесь происходит, в отличие от вашей четкой оригинальной версии. Ведь простое лучше, чем сложное; квартира лучше вложенной
Я бы порекомендовал вам на самом деле разделить fstring на две строки
num_str = f'{num:.2f}' if ppl else f'{num}'
str = f'I am {num_str}'
Таким образом, каждая строка настолько проста, насколько это возможно.