如果我的f-string中有一个参数可能是None
,是否有一种方法可以自动从字符串中省略它?
f'{first_name} {prefix} {last_name}'
如果prefix
是None
,那么这个字符串将被渲染为Arnold None Weber
。
我尝试过f'{first_name} {prefix or ''} {last_name}'
,但那是一个语法错误。
如果我的f-string中有一个参数可能是None
,是否有一种方法可以自动从字符串中省略它?
f'{first_name} {prefix} {last_name}'
如果prefix
是None
,那么这个字符串将被渲染为Arnold None Weber
。
我尝试过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}"
f"""{first_name} {prefix or ''} {last_name}"""
但是请注意,这并没有完全达到你想要的效果。你将得到Arnold Weber
,但中间有空格,因为两端的空格并不受条件限制。你可以像这样做:
f'{first_name} {prefix+" " if prefix else ""}{last_name}'
f'{first_name} {prefix or ""}{" " if prefix else ""}{last_name}'
...但此时,我认为您已经无法享受f-string的简洁性和可读性优势了。也许考虑使用其他方法,比如:
' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))
不是说这篇文章更短——而是逻辑更加清晰。
f'{first_name} {prefix or ""} {last_name}'
' '.join(filter(None, (first_name, prefix, last_name)))
。 - northtree