代码之家  ›  专栏  ›  技术社区  ›  voodoo-burger

避免F字符串中没有

  •  0
  • voodoo-burger  · 技术社区  · 7 年前

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

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

    如果 prefix 没有 然后该字符串将呈现为 Arnold None Weber .

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

    2 回复  |  直到 7 年前
        1
  •  7
  •   abarnert    7 年前

    我试过f'名字前缀或'姓氏',但这是一个语法错误。

    它是语法错误的唯一原因是您试图将单引号放在单引号中。所有常见的固定方法都会起作用:

    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)))
    

    不是这样的 更短的 但是逻辑更清楚了。

        2
  •  1
  •   Ignacio Vazquez-Abrams    7 年前

    当然是语法错误,你弄坏了字符串。

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