在f-string中避免无

voo*_*ger 0 python python-3.x

如果我有一个f-string,其中一个参数可能是None,有没有办法从字符串中自动省略它?

f'{first_name} {prefix} {last_name}'

如果prefix是,None则此字符串将呈现为Arnold None Weber.

我试过f'{first_name} {prefix or ''} {last_name}'但这是一个语法错误.

aba*_*ert 7

我试过f'{first_name} {prefix或''} {last_name}',但那是语法错误.

它是语法错误的唯一原因是您尝试将单引号放在单引号内.所有常用的修复方法都可以:

f'{first_name} {prefix or ""} {last_name}'
f"{first_name} {prefix or ''} {last_name}"
f"""{first_name} {prefix or ''} {last_name}"""
Run Code Online (Sandbox Code Playgroud)

但是,请注意,这并不是您想要的.你不会得到Arnold Weber,但是Arnold Weber,因为两端的空格都不是有条件的.你可以这样做:

f'{first_name} {prefix+" " if prefix else ""}{last_name}'
f'{first_name} {prefix or ""}{" " if prefix else ""}{last_name}'
Run Code Online (Sandbox Code Playgroud)

...但在那时,我认为你不再能获得f-strings的简洁性和可读性.也许考虑不同的东西,比如:

' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))
Run Code Online (Sandbox Code Playgroud)

并不是说这更短 - 但逻辑更清晰.

  • 带有反斜杠的那个不起作用 - 表达式中不允许使用反斜杠,除非他们在3.7中更改了它. (2认同)