【问题标题】:Comments in continuation lines续行中的注释
【发布时间】:2015-07-15 00:55:23
【问题描述】:

假设我有一个多行命令:

if 2>1 \
 and 3>2:
    print True

if 块中,我可以在其中一个条件旁边添加注释,方法是使用括号来换行:

if (2>1 #my comment
 and 3>2):
    print True

事实上,它与PEP 8 guideline 推荐的做法一致:

包装长行的首选方法是在圆括号、方括号和大括号内使用 Python 隐含的续行。通过将表达式括在括号中,可以将长行分成多行。应该优先使用这些,而不是使用反斜杠来续行。

但是,有时您需要使用延续。例如,long, multiple with-statements cannot use implicit continuation。那么,如何在特定行旁边添加评论?这不起作用:

with open('a') as f1, #my comment\
 open('b') as f2:
    print True

更一般地说,是否有一种通用方法可以在特定续行旁边添加评论?

【问题讨论】:

  • 当我把你的代码放进去时,Spyder告诉我“无效的语法”,当我在评论前放一个``时,“行继续符后出现意外字符”,所以我猜不,你可以'不要用行延续来做行 cmets。我猜这与尝试将注释拼接到语句中有关,即 x = 2 + #comment# 3

标签: python continuation


【解决方案1】:

您不能在同一行上合并行尾注释 (#) 和续行 (\)。

我不建议这样做。 -- 但是,有时您可以将您的评论伪装成一个字符串:

with open(('a', '# COMMENT THIS')[0]) as f1, \
     open(('b', '# COMMENT THAT')[0]) as f2:
    print(f1, f2)

【讨论】:

    【解决方案2】:

    你不能。查找Python reference manual (3.4)的一些摘录:

    注释以井号字符 (#) 开头,它不属于 字符串文字,并在物理行的末尾结束。

    以反斜杠结尾的行不能带有注释

    注释表示逻辑行的结束,除非隐含 行连接规则被调用

    隐式连接:括号、方括号或 花括号可以拆分为多条物理线,而无需 使用反斜杠

    隐式续行可以携带 cmets

    因此参考手册明确禁止在显式续行中添加注释。

    【讨论】:

    • 以反斜杠结尾的行不能带有注释 听起来正是我正在寻找的东西。 [关于风格] 你指的是docs.python.org/3.4/reference/lexical_analysis.html吗?正确引用以表明参考可能会很好。
    • @fedorqui :我从文档的本地副本中获取信息,但我应该参考在线文档。我可以确认您提供的链接与我在本地副本中的链接相同,并且我已经用它更新了我的帖子。
    【解决方案3】:

    您不能在同一行上使用 cmets 和反斜杠来续行。您需要使用其他策略。

    最基本的方法是调整评论文本以放置它,例如在相关部分之前。您还可以通过将返回上下文的代码重构为具有描述性名称的函数或方法来记录您的意图,而无需使用 cmets。

    【讨论】:

    • 有趣!。我接受另一个答案,因为它提供了一些参考。但是,这个我也会使用。非常感谢!
    【解决方案4】:

    除了嵌套with,我没有看到任何解决方案:

    with open('a.txt', 'w') as f1: #comment1
        with open('b.txt', 'w') as f2: #comment2
            print True
    

    【讨论】:

    • 显然 with 语句不再是“多重”了。
    • 这是防止问题发生的聪明方法。但是,我仍然很好奇如何使用续行来做到这一点。
    猜你喜欢
    • 2015-08-06
    • 2014-10-21
    • 2016-09-26
    • 1970-01-01
    • 2013-05-23
    • 2015-12-23
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多