Использование 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}'

Таким образом, каждая строка настолько проста, насколько это возможно.

Другие вопросы по тегам