14

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

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

如果prefixNone则此字符串将呈现为Arnold None Weber.

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

4

2 回答 2

33

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

这是语法错误的唯一原因是您试图将单引号放在单引号内。所有通常的修复方法都可以:

f'{first_name} {prefix or ""} {last_name}'
f"{first_name} {prefix or ''} {last_name}"
f"""{first_name} {prefix or ''} {last_name}"""

但是,请注意,这并不完全符合您的要求。你不会得到Arnold Weber, 但是Arnold Weber,因为两端的空格不是有条件的。你可以这样做:

f'{first_name} {prefix+" " if prefix else ""}{last_name}'
f'{first_name} {prefix or ""}{" " if prefix else ""}{last_name}'

......但在这一点上,我认为您不再获得 f-strings 的简洁性和可读性优势。也许考虑一些不同的东西,比如:

' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))

并不是说这更短——但逻辑要清晰得多。

于 2018-07-11T22:49:52.187 回答
4

当然这是一个语法错误;你断了你的弦。

f'{first_name} {prefix or ""} {last_name}'
于 2018-07-11T22:49:31.437 回答