为什么PEP-8规定一行的最大长度为79个字符?

319
在这个千禧年,为什么Python PEP-8规定最大行长为79个字符?
几乎所有的代码编辑器都可以处理更长的行。如何换行应该由内容的使用者决定,而不是内容的创建者的责任。
在这个时代,是否有任何(合理的)好理由遵守79个字符?

94
你的问题的答案在PEP-8中。 - cdleary
44
通过缩短代码行的长度,可以增加您的 KLOC(千行代码),从而提高生产效率。 :p - Alex
18
你们不使用并列差异工具吗? - endolith
12
对于那些能够回想起打孔卡片时代的人们,打孔卡片的宽度为80列(参见https://en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era)。这个值随后被愚笨的ASCII终端所采用。然后传播到其他“标准”中... - RBV
3
如果你告诉它,黑色格式可以设置为120。我这样做了。PEP-8还说“将行长限制增加到99个字符是可以的”,但人们似乎大部分时间都忽略了这一信息。 - NeilG
显示剩余11条评论
9个回答

178
PEP-8的价值在于防止人们为无关紧要的格式规则争吵,让他们专注于编写良好、一致格式的代码。当然,没有人真正认为79是最佳长度,但将其更改为99或119或您喜欢的任何行长并没有明显的好处。我认为有两种选择:遵循规则并找到一个值得奋斗的有意义的事业,或提供一些数据来证明可读性和生产力如何随着行长的变化而变化。后者将非常有趣,并且有很大的机会改变人们的想法。

52
大多数阅读研究都以每行英寸为单位,而不是每行字符。 "66个字符规则"是基于针对阅读报纸的研究所得出的。最近的研究表明,在阅读在线文章时,每行120个字符(12号字体大小的10英寸)的阅读速度会增加,并且不会影响理解能力。 - Pace
13
实际上,每个深入研究这个话题的人都认为79个字符是最佳的。这就是为什么它被添加到PEP8中的原因!这个答案实际上是错误的。这个才是正确的答案 - erikbstack
288
将其更改为99或119或其他您喜欢的行长度没有明显的好处。这是非常错误的。将一行文字限制在40个字符并查看可读性如何。显然,少些换行符号=更好的可读性,只要您有屏幕空间,在2015年,您应该有足够的屏幕空间。换行会影响可读性。可读性影响可维护性。可维护性影响质量。如果您在80个字符上换行,则会影响质量。 - Jonathan
11
与任何非代码的内容争论可读性是无意义的,因为这些研究假定运行的是文本。代码每一行都有不同的(字符)行长,看起来完全不同。即使你写到行末,缩进也会改变每行的字符数。 - Corvince
9
PEP-8同样说“将行长度限制增加到99个字符也是可以的”,但人们大多数时候似乎都忽略了这一信息。 - NeilG
显示剩余10条评论

137
保持代码的可读性不仅仅是机器可读性。许多设备一次只能显示80个字符。此外,通过能够将多个窗口并排设置,使拥有更大屏幕的人更容易进行多任务处理。
可读性也是强制使用行缩进的原因之一。

84
同意,但是为什么是79?为什么不是100或120?保持可读性是双向的。过多的代码上下跳动也很难理解。 - pcorcoran
21
确实有很多设备只能显示80个字符。它们中有多少无法执行软换行? - Jim
41
从用户体验的角度来看,最好不要有代码自动换行。大多数情况下这是无法接受的。 - Justin Bozonier
12
79 来源于点阵打印机时代,它们每行只打印 80 个字符。现在我们都使用 16:9 宽屏显示器,有很多宽度但垂直空间有限... 我遵循 PEP8 中的所有规则,除了这一条,我认为它应该与现代技术保持一致。 - Gert Steyn
154
79个字符的限制使程序员缩短变量和函数名并使用更加晦涩难懂的名称以适应限制,这会降低可读性。 - Gert Steyn
显示剩余11条评论

57

我是一名程序员,每天都需要处理很多开源和公司内部开发的代码。

作为程序员,我发现同时打开许多源代码文件非常有用,通常在我的(宽屏)显示器上组织桌面,使两个源代码文件并排放置。我可能会在两个文件中都编程,或只是阅读一个文件并在另一个文件中编程。

当其中一个源代码文件的宽度超过120个字符时,我会感到不满和沮丧,因为这意味着我无法在一行屏幕上舒适地放置一行代码。这会破坏格式而导致换行。

我这么说是因为超过120个字符,你应该为了易读性而跨行分割,更何况编码规范。

我编写代码时考虑80列,这只是为了当我超过这个边界时,也不至于太糟糕。


18
我在编写代码时会考虑到每行80个字符的限制。这样做只是为了当我超过这个限制时,影响不会太严重。和你一样。 - KobeJohn
5
10年后:这不是取决于你如何设置换行吗? 换行可以像你想要的那样智能或愚蠢。 如果阅读起来不舒服,那就是你编辑器的失败。 - David Mulder
7
我编写的代码通常限制在120个字符以内,但如果这样更易于阅读,则偶尔会超过这个长度。如果你告诉Black,它会按照120个字符进行格式化。PEP-8规范也表示:“将行长限制增加到99个字符是可以接受的”,但很多时候人们似乎会忽略这一信息。实际上,几乎没有人使用80个字符宽的终端,日志消息也不会这么窄。 - NeilG
我现在已经使用tmuxvim几年了,我觉得它非常灵活和强大,可以同时查看几个任意长度的窗格,@jerub。也许你可以考虑使用一个更强大的集成开发环境? - undefined

45

我相信研究排版的人会告诉你,每行66个字符是最易读的长度。即便如此,如果你需要通过ssh会话远程调试机器,大多数终端默认为80个字符,79个字符正好适合,任何更宽的内容都会在这种情况下变得非常麻烦。你也会惊讶地发现有多少开发者将vim + screen作为日常环境。


<不满> Emacs超棒! </ 不满> +1,我认为79个限制来自UNIX的早期时期(可能还有MULTICS),它们有80x25个字符终端。 - Joe D
14
我的ssh+screen+vim环境可以正常显示长行。 - chrishiestand
65
每行66个字符被认为是长度最易阅读的宽度。我想我们应该把代码写成2到3栏,因为这就是报纸的版面布局方式? - Mark E. Haase
29
你的讽刺话语相当接近真相:优秀的编辑器可以进行分割窗格并将不同的内容并排显示(来自相同或不同的文件)。巧合的是,这通常只适用于代码具有行长度标准的情况下... - mike3996
这是唯一有意义的答案。 - HAL9000

20

在A4纸上,以默认大小打印等宽字体时,每行有80个字符,共66行。


16
我接受这个标准,它是有效的。但是谁还在打印代码呢?此外,谁会在无法缩放或调整格式的环境中打印代码?你认识的人最后一次因为无法显示100个字符的行而犯难是什么时候? - pcorcoran
5
为什么人们在2012年还要打印代码?这让我想起去参加技术会议时拿到的袋子和印着演示文稿的打印装订本。如今已经是21世纪了:把幻灯片通过电子邮件发给我,否则这个袋子和装订本直接就会成为垃圾填埋场的垃圾。 - Mark E. Haase
5
为什么80-1比80-0或80-2更好? - n611x007
18
“默认尺寸”?你是说?告诉我更多关于这些被普遍接受的默认尺寸。 - Bruno Bronosky
29
是的,让我们把代码在打印纸上的外观放在所有其他因素之上。 - Jonathan

15

以下是我为什么喜欢80个字符宽度的原因:在工作中,我使用Vim,在一个运行在1680x1040分辨率(我总是记不住)的显示器上同时处理两个文件。如果行太长,即使使用自动换行,我也很难阅读文件。不用说,我讨厌处理其他人喜欢使用长行的代码。


1
你也会在 JavaScript/HTML 中使用 Vim 吗? - elad silver
2
@eladsilver 我搞不清那是一个笑话吗?:-D - Kyias
抱歉,我对vim并不是很精通。显然,如果您从事网页开发,也会将其用于HTML/JS,而这些类型永远不会有80个字符的限制,因为前端开发人员不知道PEP8规范。因此,如果您使用的不仅仅是Python,那么将Python限制在80个字符以内并不能解决您的问题。那么我的问题是,您如何处理其他编程语言? - elad silver
我使用Vim编程工具,每行限制为120个字符。我使用水平分割的 :diffthis 命令。如果你在1680像素上只能容纳160个字符,那么你的字体大小可能很大。 - NeilG
我使用vim,不喜欢79个字符的规则。95%的代码都没关系,但是单元测试模拟数据、URL等等可能会失控。在这种情况下,我宁愿换行。 - webduvet

5

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


5
大多数Python编辑器都不支持软换行,因为这会在这门语言中空格和缩进至关重要的情况下产生模糊、难以阅读的代码。 - Chris Upchurch
4
只要视觉上标识出包裹,它就不会产生歧义或难以阅读的代码。Kate可以做到这一点,而且效果很好。如果编辑器无法处理此功能,则应向编辑器报告错误,而不是因此强制执行避免该错误的编码风格。 - Jim
6
即使在可视化标识的情况下,这仍然会使代码更难以阅读,这就是为什么Python编辑器通常不支持它的原因。 - Chris Upchurch
你真的试过很长时间吗?我试过了,据我的经验,这并不会使代码更难阅读。你能证明不包含此功能是Python编辑器的原因吗?我从未听说过这种说法。 - Jim

2

我同意Justin的观点。具体来说,过长的代码行对于人类来说更难阅读,有些人的控制台宽度仅容纳每行80个字符。

编程风格建议是为了确保您编写的代码能够在尽可能多的平台上被尽可能多的人舒适地阅读。


13
这是一个懒惰的论点。并不总是80行会影响可读性。快速查看任何适度复杂的Python代码库,若将其换行为80行,则实际上证明相反的情况 - 将单行函数调用拆分成多行会使跟踪发生了什么更加困难。 - Jonathan

-1

因为如果你将代码推到第80列以外,这意味着你要么正在编写一个非常长且过于复杂的代码行(因此你应该重构),要么是你缩进太多了(因此你应该重构)。


107
我认为你不能断言任何超过80个字符边界的代码行都需要重构。类方法已经缩进两次,再加上一个“if”的缩进等等,再加上一个简单的列表推导式,就很容易超过80个字符的边界了。 - user297250
56
如果你用可读性强的方式给符号命名,比如说使用"users_directed_graph"代替"usr_dir_gph",那么即使是一个简单的表达式也会占据很多行的字符。 - Mark E. Haase
10
在Python编程中,我发现如果一行代码超过80个字符,就应该停下来思考为什么。通常是因为存在糟糕的设计决策。 - Mike Vella
3
这也是我的经验。正如 @mehaase 所指出的那样,它还涉及更长的变量名,但我认为这是一个好处。在“users_directed_graph”这种情况下,三个连续单词的可用组合远远超过了可以合理适应单个命名空间的组件数量。我认为我写过的旧代码中存在许多类似的长变量名位于同一命名空间中,这使得阅读更加困难,通常最好进行重构。 - TimClifford
5
在一种需要为每个作用域更改缩进的语言中,说80个字符的行等同于复杂性是一个过于简单化的论点。有时候80个字符恰好足以调用函数。其他语言的现代IDE /编辑器足够智能,可以识别这一点,并能分辨何时换行,而不是对所有内容施加一般性限制,这会损害整体可读性。 - Jonathan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接