根据条件使用带格式的 f 字符串

Using f-string with format depending on a condition

如何使用带逻辑的 f 字符串将 int 格式化为 float?我想如果 pplTruenum 格式化为小数点后 2 位,如果 pplFalse 则将其重新格式化。

类似 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

您可以嵌套表达式以计算 f 字符串中的内部表达式。这意味着您可以将三元组移动到您的 f 字符串中:

string = f'I am {num:{".2f" if ppl else ""}}'

请注意嵌套所需的额外一对大括号。

但我不认为这是 清洁剂。就我个人而言,与您清晰的原始版本相比,我更难解析这里发生的事情。毕竟简单总比复杂好;扁平比嵌套好。

我建议您实际上将字符串分成两行

num_str = f'{num:.2f}' if ppl else f'{num}'
final_str = f'I am {num_str}'

这样每一行都尽可能简单。