在 f 字符串中避免 None
Avoiding None in f-string
如果我有一个 f 字符串,其中一个参数可能是 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}'
I tried f'{first_name} {prefix or ''} {last_name}' but that's a syntax error.
它是语法错误的唯一原因是您试图将单引号放在单引号内。所有常用的修复方法都有效:
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 字符串的简洁性和可读性优势。也许考虑一些不同的东西,比如:
' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))
并不是说这更短——但逻辑更清晰。
如果我有一个 f 字符串,其中一个参数可能是 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}'
I tried f'{first_name} {prefix or ''} {last_name}' but that's a syntax error.
它是语法错误的唯一原因是您试图将单引号放在单引号内。所有常用的修复方法都有效:
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 字符串的简洁性和可读性优势。也许考虑一些不同的东西,比如:
' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))
并不是说这更短——但逻辑更清晰。