根据条件使用格式的f-string

jac*_*118 9 python python-3.x f-string

如何使用带有逻辑的f-string格式化intfloat?我想pplTrue格式化num为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
Run Code Online (Sandbox Code Playgroud)

And*_*eak 13

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

string = f'I am {num:{".2f" if ppl else ""}}'
Run Code Online (Sandbox Code Playgroud)

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

但我不认为这更清洁.就个人而言,我发现解析这里发生的事情更加困难,而不是原始版本.毕竟简单比复杂更好; 扁平比嵌套更好.

  • 这很恶心,我喜欢它 (8认同)
  • 此外,`}}` 处理有点令人困惑——通常`}}` 表示文字右大括号,但在这里,`}}` 关闭两个嵌套的替换字段。查看 [语言参考](https://docs.python.org/3/reference/lexical_analysis.html#f-strings),我可以看到解析规则是如何工作的,但仍然令人困惑。 (3认同)

Gam*_*rix 11

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

num_str = f'{num:.2f}' if ppl else f'{num}'
str = f'I am {num_str}'
Run Code Online (Sandbox Code Playgroud)

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

  • 或者 `form = '.2f' if ppl else ''` 和 `f'I am {num:{form}}'` 类似。 (2认同)