【问题标题】:What motivates the "no-alignment" policy of PEP 8?是什么激发了 PEP 8 的“不结盟”政策?
【发布时间】:2019-02-06 11:30:44
【问题描述】:

PEP 8 有一个 specific guideline 反对运算符周围的空白以进行对齐:

没有:

x             = 1
y             = 2
long_variable = 3

如果我理解正确,也建议不要:

salaries = {
    "Alice": 1500,
    "Bob":   1300,
    #      ^^ extra whitespace
}

这些具体建议有什么用?

【问题讨论】:

  • 实时项目总是看到新变量和变量重命名。每次添加新的更长的变量名时,您是否要重新对齐所有这些行?
  • PEP-8 只是样式,它们对任何东西都没有“用处”。作者只是认为这是不必要的和丑陋的。
  • 据我所知,在大多数编程语言中,代码的样式不应不必要。如果您添加一个新的更长的变量,您要么必须更改每个其他变量的间距,要么停止遵守间距规则。因此,为了保持简单和干净,您不要从一开始就添加空格
  • 换一种说法:当时它可能似乎是个好主意,但你假设你只需要这样做一次。每次您需要重新对齐这些行时,因为您做了一个小改动,就会导致您的版本控制系统发生更大的变化。
  • 另一件事:变量名和值之间的巨大空白让人很难看出哪个与哪个相配。只需 3 行就很容易,但请尝试使用 20 行。

标签: python pep8 pep


【解决方案1】:

这条规则是 Guido 原创风格文章 published in 1998 的一部分,他在其中指出:

(不要费心与我争论以上任何一个问题——我已经习惯了这种风格超过 15 年。)

所以他并没有直接激励这个人,但我可以想出一些很好的理由来解释你为什么要避免这样做。在当时,将代码与空格对齐可能似乎是个好主意,一切都整齐排列。

但大多数项目都不是静态的。您经常看到,在现实生活中的项目中,代码会随着时间的推移而发生变化,并且您可能会在您仔细对齐的列表中添加、删除或重命名条目。您可能很容易不得不调整整个块的对齐方式,因为您的更改改变了现在最长的条目。

现在,此类更改会为您带来更多工作。您必须重新对齐块。您的同事和未来的自己必须做更多的工作来阅读版本控制系统中的变更集。

或者,后来的编辑可能不愿重新对齐其他条目。 Wine 项目 dlls/msi/msipriv.h 文件 started nicely aligned,但 over time inconsistencies 潜入和你 end up with a bit of a mess

其次,对齐并不一定会使代码更易于阅读;如果中间有足够的空白,您很容易误读什么值与什么名称对应。

同时,PEP 8 是一个指南document itself states

愚蠢的一致性是小聪明的妖精

[...]

但是,要知道什么时候不一致 - 有时样式指南建议不适用。如有疑问,请使用您的最佳判断。看看其他例子,然后决定什么看起来最好。

您需要自行决定何时使用对齐方式无论如何

Python 标准库break this specific rule 的某些部分(是的,这是上面Wine 项目示例的Python 反映;该示例是imported from an external project years ago),还有broken PEP8 rules there for historical reasons 的其他示例,但有时在一些有限的领域,打破规则可能有意义。

【讨论】:

    猜你喜欢
    • 2020-04-14
    • 2013-10-29
    • 1970-01-01
    • 2013-09-26
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多