45

如何使用带逻辑的 f-string 将 a 格式化int为 a float?我想 if pplisTrue格式化num为 2 位小数,如果pplFalserformat 则不管它是什么。

类似的东西,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
4

2 回答 2

60

您可以嵌套表达式以评估 f 字符串中的内部表达式。这意味着您可以在 f-string 中移动三元组:

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

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

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

于 2018-08-16T22:10:53.687 回答
12

我建议您实际上将 fstring 分成两行

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

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

于 2018-08-16T22:15:11.210 回答