【问题标题】:Is there a way to include a comment in an f-string?有没有办法在 f 字符串中包含注释?
【发布时间】:2020-09-10 07:48:37
【问题描述】:

对于 mo 在 f 字符串中包含注释会很有用。例如,使用以下代码:

f"""
<a
   href="{ escape(url) }"
   target="_blank" { # users expect link to open in new tab }
>bla</a>
"""

如果这段代码相当于:

f"""
<a
   href="{ escape(url) }"
   target="_blank" 
>bla</a>
"""

您可以在大括号之间包含完整的 Python 表达式,但看起来您不能包含 cmets。我对么?有没有办法做到这一点?

【问题讨论】:

  • 你可以做的是:&gt;&gt;&gt; x=1;y=2 &gt;&gt;&gt; data="""x: {x}, y: not wanted""" &gt;&gt;&gt; data 'x: {x}, y: not wanted' &gt;&gt;&gt; data.format(**locals()) 'x: 1, y: not wanted' &gt;&gt;&gt; data.format(**globals()) 'x: 1, y: not wanted' 虽然丑陋,但它不会抛出异常并且保留了 f-string 行为。但是使用 Jinja 或其他理智的东西而不是滥用 f-strings。
  • 您是自己构建html 字符串还是从其他地方获取它?我不清楚你在做什么。
  • @CONvid19 我使用了 HTML 的示例,因为我认为它会更简单。实际上,我实际上是在构建一个 SQL 查询。
  • 通过您的代表,我希望您知道如何使用ask a good question,具体来说,准确地描述您正在尝试做的事情,当您使用html 时显然不是这种情况尝试构建 SQL 查询时的示例。
  • @CONvid19 我无法告诉你寻找问题 X 的答案是多么令人沮丧,在 SO 上找到确切的问题,却发现评论员要求额外的细节,使问题变得更多窄,这样他们就可以回答 Y 问题,而不是 X 问题,所以我必须继续寻找 X 问题的答案。我知道 XY 问题是什么,但并不是每个问题 X 实际上都需要答案Y,大多数时候,我确实需要我所问问题的答案!

标签: python f-string


【解决方案1】:

来自PEP498

表达式中不允许使用'#' 字符的注释。

除了在 Python 中放一个'#' 字符外,没有其他方法可以评论,所以这是不可能的。

【讨论】:

  • 除了放一个'#'没有办法评论,不对,试试""" some comment """
  • @CONvid19 我认为您在谈论文档字符串。它们不必被三引号包围。它们不是 cmets,在这种情况下它们不会工作。
  • 它们在技术上不是 cmets,但它们是按原样使用的,即多行 cmets。 Is there a way to create multiline comments in Python?
  • @CONvid19 您可以使用布尔值对元组进行索引,并像使用三元运算符一样使用它,但这是否使它真的三元运算符?不,是一样的。您可以在代码中使用一些三引号字符串,并期望您的读者像 cmets 一样解释它们,但对于 Python,它们仍然是字符串:&gt;&gt;&gt; 5 + 5 """ is this a comment? """ 不,SyntaxError 是。
【解决方案2】:

没有。 f-string 中没有注释。

在构建str 时,模板引擎可能会过大。加入 liststr 可能是可取的。

s = ''.join([
    '<a',
    f' href="{escape(url)}"',
    ' target="_blank">',
    # users expect link to open in new tab
    'bla</a>',
])

【讨论】:

  • 如果多人编辑同一个代码库,从长远来看是不可维护的,例如跳过逗号,忘记引号。不幸的是,如果测试套件在部署之前无法捕捉到它,这将导致灾难。
【解决方案3】:

您不能在表达式写评论。但是你可以在多个片段中编写一个字符串,并在两个片段之间写一个注释,前提是下一个片段从不同的行开始:

s = (f"""
<a
   href="{ escape(url) }"
   target="_blank" """ # users expect link to open in new tab
f""">bla</a>
""")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2020-04-08
    • 2016-12-11
    相关资源
    最近更新 更多