3

我正在尝试使我的 Python 代码看起来更具可读性。我阅读了风格指南,但我不知道如何获得这样的东西

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

4 回答 4

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 中的内联注释:

谨慎使用内联注释。

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

这是内联注释样式指南的开端,它非常强烈地暗示,如果你试图在同一行上写的东西超出你的容量,你应该改用块注释。

此外,当我们谈论 PEP 8 时:

  • “评论应该是完整的句子。” 您的第一条评论需要句号。(是的,它还说“如果评论很短,末尾的句号可以省略”,但你有一个 3 行 2 句的评论,所以这里不适用。)
  • “如果评论是一个短语或句子,它的第一个单词应该大写”。所以,大写“Compute”(但不是“foo”,因为那是一个标识符)。
  • 不要添加函数名称不好的注释,只需重命名函数即可。
  • 去掉那个分号。

所以:

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

但是一旦你这样做了,你甚至不需要评论。

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

于 2013-01-18T23:38:30.283 回答
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 建议不要对齐分配、dict 文字等... - 我认为这是对它的扩展。

x = x + 1 # Compensate for border
some other code # some other comment
于 2013-01-18T23:32:37.097 回答
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
于 2013-01-18T23:37:54.053 回答
0

尽管有使用替代方案的原因,如果您发现自己处于需要它的位置,例如评论用伪代码 Python 编写的证明行,您可以使用align-regexp

M-x align-regexp RET  # RET

(在 # 号前加一个空格)应该按照你的要求做。它适用于当前选定的区域。

于 2019-02-15T08:48:56.293 回答