如何在Python代码中包装和对齐注释?

时间:2013-01-18 23:30:10

标签: python emacs alignment comments

我正在尝试让我的Python代码看起来更具可读性。我读了style guide,但我不知道如何得到这样的东西

x = foo(x);  # compute the value of the next prime number
             # that is larger than x  (foo is a really bad 
             # choice for this function's name) 

或者这个

x = x + 1                 # Compensate for border
some other code           # some other comment

如何将评论包装起来并将它们对齐?你不只是输入一堆space,对吗?如果我编辑了代码,我是否必须手动重新排列注释?

我正在使用emacs作为我的编辑。

4 个答案:

答案 0 :(得分:9)

我认为你根本不想要这个。 Lattyware已经解释了第二种情况,但让我们来看看第一种情况:

x = foo(x);  # compute the value of the next prime number
             # that is larger than x  (foo is a really bad 
             # choice for this function's name) 

太长而无法嵌入的注释可以转换为代码上方的块注释,如下所示:

# compute the value of the next prime number that is larger than
# x (foo is a really bad choice for this function's name)
x = foo(x);

这似乎比右对齐的评论更具可读性。它还为您提供更多空间。使用emacs肯定更容易(只需键入整个内容和meta-Q)。并且,在PEP 8中引用Inline Comments

  

谨慎使用内联评论。

     

内联注释是与语句在同一行的注释。

这是内联注释的样式指南的最开始,它强烈地暗示如果你想要写的数量超过你可以放在同一行上,你应该使用块注释。

另外,我们正在谈论PEP 8:

  • “评论应该是完整的句子。”您的第一条评论需要期间。 (是的,它也说“如果评论很短,最后的句号可以省略”,但你有一个3行2句的评论,所以这里不适用。)
  • “如果评论是短语或句子,则其第一个单词应该大写”。因此,大写“Compute”(但不是“foo”,因为那是一个标识符)。
  • 不要添加功能名称不好的注释,只需重命名该功能。
  • 摆脱那个分号。

所以:

# Compute the value of the next prime number that is larger than x.
x = next_larger_prime(x)

但是一旦你完成了这项工作,你甚至不需要 评论。

事实上,这很常见。当您发现自己想知道如何打破评论的样式指南时,您可能应该通过询问如何重新组织代码以使其不需要所有这些注释。这并不总是可行,但通常值得至少尝试。

答案 1 :(得分:3)

我认为这两种情况大不相同。在第一种情况下,我会在选项卡上使用空格,因为您希望注释无论用户编辑器中的选项卡宽度设置如何都要对齐。显然,如果使用制表符来正常缩进代码,请使用制表符直到达到代码级别,然后使用空格。

想象一下使用标签:

x = foo(x) # compute the value of the next prime number
⟶⟶⟶⟶ # that is larger than x  (foo is a really bad 
⟶⟶⟶⟶ # choice for this function's name) 

现在想象一下有人使用较短的标签长度​​设置:

x = foo(x) # compute the value of the next prime number
→→→→ # that is larger than x  (foo is a really bad 
→→→→ # choice for this function's name) 

但是,我认为,您可能希望用三引号字符串替换它:

"""Compute the value of the next prime number
that is larger than x  (foo is a really bad 
choice for this function's name)."""
x = foo(x)

在第二种情况下,我不认为对齐注释会增加可读性,我只是将它们放在行尾。 PEP-8建议不要对齐作业,字典文字等...... - 我认为这是对此的延伸。

x = x + 1 # Compensate for border
some other code # some other comment

答案 2 :(得分:3)

你不应该这样做。第一个应格式如下:

# Compute the value of the next prime number that is larger than x
# (foo is a really bad choice for this function's name).
x = foo(x)

第二个:

x = x + 1  # Compensate for border
some other code   # some other comment

答案 3 :(得分:0)

尽管有使用替代方法的原因,但是如果您发现自己处于需要的位置,比如说要注释用伪代码Python编写的证明行,则可以使用align-regexp

M-x align-regexp RET  # RET

(在#号前放置一个空格)应该可以满足您的要求。它适用于当前选定的区域。