为啥 PEP-8 指定最大行长度为 79 个字符? [关闭]

Posted

技术标签:

【中文标题】为啥 PEP-8 指定最大行长度为 79 个字符? [关闭]【英文标题】:Why does PEP-8 specify a maximum line length of 79 characters? [closed]为什么 PEP-8 指定最大行长度为 79 个字符? [关闭] 【发布时间】:2010-09-10 11:26:52 【问题描述】:

为什么在这个千年里 Python PEP-8 应该指定一个包含 79 个字符的 maximum line length?

几乎所有的代码编辑器都可以处理更长的行。如何包装应该是内容消费者的选择,而不是内容创建者的责任。

在这个时代坚持 79 个字符是否有任何(合法的)充分理由?

【问题讨论】:

您的问题的答案是in PEP-8。 更短的生产线长度通过增加您的 KLOC 来提高生产力。 :p 你们不使用并排比较工具吗? 今天我开始使用纵向显示器,这个鼓励对查看全文很有帮助。 对于那些可以追溯到打孔卡的人来说,打孔卡的宽度为 80 列 (en.wikipedia.org/wiki/…)。该值随后被哑 ASCII 终端采用。然后传播到其他“标准”中…… 【参考方案1】:

PEP-8 的大部分价值在于阻止人们争论无关紧要的格式规则,并继续编写良好的、格式一致的代码。当然,没有人真的认为 79 是最佳的,但是将其更改为 99 或 119 或任何您喜欢的线长都没有明显的好处。我认为选择如下:遵循规则并找到值得争取的理由,或者提供一些数据来证明可读性和生产力如何随行长而变化。后者会非常有趣,而且我认为很有可能改变人们的想法。

【讨论】:

大多数阅读研究以英寸为单位,而不是每行字符。 66 个字符规则是基于为阅读报纸所做的研究。 Recent studies 表明,在阅读在线文章时,阅读速度提高到每行约 120 个字符(12 号字体时为 10 英寸),而不会影响理解。 实际上阅读该主题的每个人认为 79 个字符是最佳的。这就是它被添加到 PEP8 的原因!这个答案实际上是错误的。 This one is the correct one 我认为问题是关于为什么 79 比 80 或 78 好 there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is 这在很多方面都是错误的。在 40 个字符处换行并告诉我它的可读性如何。显然,更少的包装 = 更多的可读性,只要你有屏幕空间,在 2015 年,你做到了。包装影响可读性。可读性影响可维护性。可维护性影响质量。如果包装为 80 个字符,质量会受到影响。句号。 争论任何非代码的可读性是没有用的,因为这些研究假设运行文本。代码看起来完全不同,每行都有不同的(字符)行长度。即使你写到行尾,缩进也会改变每行的字符数。【参考方案2】:

让您的代码保持人类可读,而不仅仅是机器可读。很多设备一次只能显示 80 个字符。此外,通过将多个窗口设置为并排,大屏幕用户可以更轻松地执行多项任务。

可读性也是强制行缩进的原因之一。

【讨论】:

是的,同意。但为什么是 79?为什么不是 100 或 120?保持可读性是双向的。太多的上下阅读代码也很难理解。 确实很多设备只能显示80个字符。有多少人不能进行软包装? 另外,最好不要有代码包装。从用户体验的角度来看,这对大多数人来说是不可接受的。 有些操作系统(如 MVS)无法处理超过 72 个字符的行。 PEP-8 在这里无济于事。设置 79 个字符的任意限制是没有意义的,因为每行字符的好坏取决于编辑器、监视器、用户的个人偏好等。 79 个字符也使程序员使用更短更隐蔽的变量和函数名称来使一切都合适。这不利于可读性。【参考方案3】:

我是一名每天必须处理大量代码的程序员。开源以及内部开发的内容。

作为一名程序员,我发现一次打开多个源文件很有用,并且经常在我的(宽屏)显示器上整理我的桌面,以便两个源文件并排放置。我可能同时在两者中进行编程,或者只是阅读其中一种并在另一种中进行编程。

当其中一个源文件的宽度大于 120 个字符时,我感到不满意和沮丧,因为这意味着我无法在一行屏幕上轻松地放置一行代码。它打乱了换行的格式。

我说 '120' 是因为我会因为代码宽而感到恼火。在这么多字符之后,为了便于阅读,您应该跨行拆分,更不用说编码标准了。

我在编写代码时考虑了 80 列。这只是为了当我确实泄漏到那个边界时,这并不是一件坏事。

【讨论】:

“我在编写代码时考虑到了 80 列。这只是为了当我确实泄漏到那个边界时,这并不是一件坏事。”我也一样。 10 年后:这不仅仅取决于您如何设置换行。换行可以像你想要的那样聪明或愚蠢。如果阅读起来不舒服,那只是编辑的失败。 我编码为 120 个字符,但在适合可读性时偶尔会更长。如果您告诉它,黑色格式为 120。 PEP-8 还说“可以将行长限制增加到 99 个字符”,但人们似乎在很多时候都隐藏了这些信息。几乎没有人使用 80 宽的终端。日志消息永远不会是 80 宽。【参考方案4】:

我相信那些学习排版的人会告诉你,每行 66 个字符应该是最可读的长度宽度。即便如此,如果您需要通过 ssh 会话远程调试机器,大多数终端默认为 80 个字符,79 个字符刚好合适,在这种情况下,尝试使用更广泛的字符会变得非常痛苦。您还会对使用 vim + screen 作为日常环境的开发人员数量感到惊讶。

【讨论】:

Emacs FTW! +1,不过。我认为 79 的限制来自具有 80x25 字符终端的早期 UNIX(可能还有 MULTICS)。 我的 ssh+screen+vim 环境显示长行没有问题。 “每行 66 个字符应该是最可读的长度宽度”我想我们应该在 2 或 3 列中编写代码,因为这就是报纸的布局方式? @mehaase:您的讽刺言论非常接近事实:体面的编辑可以拆分窗格并并排显示不同的内容(来自相同或不同的文件)。巧合的是,这通常仅在代码具有行长标准时才可行...【参考方案5】:

以默认大小打印等宽字体(在 A4 纸上)为 80 列 x 66 行。

【讨论】:

我接受这个标准;这是有效的。但是谁再打印代码了?此外,谁在不容忍缩放或其他格式选项的环境中打印代码?你认识的人上一次因为无法渲染一行 100 个字符而感到困惑是什么时候? 为什么人们在 2012 年打印代码?这让我想起了参加技术会议,收到一个袋子和一个装满演示文稿的印刷活页夹。这是 21 世纪的人们:把幻灯片发电子邮件给我,否则袋子和活页夹会直接进入垃圾填埋场。 那么为什么 80-1 比 80-0 或 80-2 好? “默认尺寸” 你说?告诉我更多关于这些普遍接受的默认尺寸的信息。 是的,让我们优先考虑代码在打印纸上的外观。【参考方案6】:

这就是我喜欢 80 个字符的原因:在工作中,我使用 Vim 并在一个运行在 1680x1040 的显示器上一次处理两个文件(我想不起来了)。如果这些行不再存在,即使使用自动换行,我也无法读取文件。不用说,我讨厌处理其他人的代码,因为他们喜欢排长队。

【讨论】:

你不也将 vim 用于 javascript/html 吗? @eladsilver 如果那是个玩笑,我无法解决? :-D 对不起,vim 不是很深刻,显然如果你在 web 中工作,你也可以将它用于 html/js 并且这些类型永远不会有 80 个字符的限制,因为前端开发人员不知道 pep8 ,所以如果你只使用 python,那么将 python 限制为 80-char 将无法解决你的问题。所以我要问的是你如何处理其他编码语言? 我在 Vim 中工作,有 120 个字符行。我将 :diffthis 与水平拆分一起使用。如果您只能在 1680 像素上放置 160 个字符,则必须使用大字体。【参考方案7】:

由于空格在 Python 中具有语义含义,因此某些自动换行方法可能会产生不正确或模棱两可的结果,因此需要进行一些限制以避免这些情况。自从我们使用电传打字机以来,标准的行长为 80 个字符,因此 79 个字符似乎是一个相当安全的选择。

【讨论】:

大多数 Python 编辑器不进行软自动换行,因为它会在空格和缩进很重要的语言中生成模棱两可难以阅读的代码。 只要包装在视觉上以某种方式识别,它就不会产生模棱两可或难以阅读的代码。凯特这样做了,而且效果很好。如果编辑器不处理这个问题,那么这是向编辑器提交错误的理由,而不是强加避免错误的编码风格的理由。 即使在视觉上表示出来,它仍然使代码更难阅读,这就是 Python 编辑器通常不支持它的原因。 您真的尝试了很长时间吗?我有。根据我的经验,它不会使代码更难阅读。您能否支持这就是 Python 编辑器不包含该功能的原因的说法?我以前从未听说过这种说法。【参考方案8】:

我同意贾斯汀的观点。详细地说,过长的代码行更难被人类阅读,有些人的控制台宽度可能每行只能容纳 80 个字符。

样式推荐是为了确保您编写的代码可以在尽可能多的平台上被尽可能多的人阅读,并且尽可能舒适。

【讨论】:

这是一个懒惰的论点。 80 行并不总是会损害可读性。快速浏览一下包含 80 行的任何适度复杂的 Python 代码库实际上证明了相反的情况 - 将单行函数调用包装到多行会使 WTF 的运行变得更加困难。【参考方案9】:

因为如果你把它推到第 80 列之后,这意味着要么你正在编写一个非常长且复杂的代码行,而且功能太多(所以你应该重构),或者你缩进太多(所以你应该重构)。

【讨论】:

-1,我认为您不能断然说超过 80 个字符边界的任何行都需要重构。类方法已经缩进了两次,为“if”等添加另一个缩进和一个简单的列表理解,并且很容易跨越 80 个字符的边界。 更不用说,如果您以人类可读的方式命名符号,例如“users_directed_graph”而不是“usr_dir_gph”,那么即使是一个简单的表达式,每行也会占用相当多的字符。 我一直在 Python 中发现,如果我超过 80 个字符,最好停下来想想为什么会这样。通常错误的设计决策是错误的。 这也是我的经验。正如@mehaase 指出的那样,它还解决了更长的变量名,但我认为这是一个好处。三个连续单词的可用组合(在“users_directed_graph”的情况下)使合理适合单个命名空间的组件数量相形见绌。我认为我编写的旧代码中许多相似的长变量名称位于同一个命名空间中更难阅读,而且通常更好地重构。 在每次范围更改都需要缩进的语言中,说 80 个字符行等同于复杂性是一个过于简单化的论点。有时 80 个字符就是调用一个函数所需要的。其他语言的现代 IDE/编辑器足够聪明,可以识别这一点,并且可以辨别何时包装,而不是对所有损害整体可读性的内容进行全面限制。

以上是关于为啥 PEP-8 指定最大行长度为 79 个字符? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PEP 8 python编程规范

3.PEP 8是什么?

PEP 8 -- Python代码格式规则

Python Enhancement Proposal #8PEP8

在windows中,文件名的最大长度为啥?

为啥会出现此错误 #1071 - 指定的密钥太长;最大密钥长度为 1000 字节? [复制]