我不遵循 PEP 8 并将我的代码行限制在79个字符以内,这样做会有什么问题吗?

10

我认为每个 Python 代码都见过 PEP 8。其中引起我的注意的是:

Limit all lines to a maximum of 79 characters.

我坐在一台宽屏幕电脑前,整个屏幕都在编程。我不是在终端中编程,也没有计划在终端中编程。因此,我不会遇到字符行限制的问题。
有多少人实际上遵循这个限制呢?如果你不是在80个字符限制的终端中编码,你还会遵循它吗?我不遵循它是不好的吗?
我讨厌这个限制是Python风格指南的一部分。

1
https://dev59.com/SW865IYBdhLWcg3wKLT5 - Glenn Maynard
3
我喜欢不超长的代码行,但79个字符太少了(特别是在今天屏幕宽度比高度多两倍的情况下)。这也可能会导致代码本身难以阅读,所以我建议与你合作的其他人达成共识并共同遵循。我倾向于使用约132个字符。 - Nick Bastin
2
实际上,这个问题只有当你在Windows上使用Putty和那种令人头疼的只有80个字符宽度的终端时才会关注。又或者你正在使用Nano编辑器而没有启用自动换行功能。但是,这真的很重要吗?其实不然。需要注意的是,PEP 8最初是在2001年编写的。 - JAL
@JAL - 我不知道PuTTy有80个字符的限制。我将我的PuTTy会话设置为178个字符。 - Andrew Cheong
9个回答

11

PEP 8:

但最重要的是:知道何时不一致——有时候,样式指南并不适用。当不确定时,请运用你的最佳判断。


10

你是唯一一个需要阅读这份代码的人吗?

无论你使用什么编程语言,将代码行长度控制在合适范围内都是推荐做法。

  1. 深层嵌套代码:这种代码很难跟进,特别是当你有超过2个级别的嵌套时。当阅读代码时,往往会错过else子句,或者忘记哪个else是为什么而存在于更长的函数中。尝试将代码分解成多个函数以提高可读性。

  2. 复杂表达式:比如从一个对象中访问另一个对象中的值... 或者当你需要对来自10个不同位置的多个值执行单个操作,并将所有函数调用和运算符合并到一行中时。如果使用临时变量将逻辑拆分为更小的片段,那么你将显着提高可读性。你也应该了解此内容

话虽如此,PEP只是一条指南。当你认为有正当理由时,可以自由打破它。如果你经常打破它,你需要重新考虑写代码的方式。


将事物分解为更小的函数是另一种非常有用的技术。这包括使用一系列生成器表达式。生成器表达式也可以很好地分布在几行上 - 我通常将 iffor 对齐。 - intuited

4

我发现阅读超过80个字符的文本很困难。我的眼睛在回到左边界时容易失去所在行。因此,在某种程度上,这不是因为必须在终端(或cmd窗口或xterm)上查看代码而受到限制,而是一种可读性要求。 我有时会打破规则一两个字符,但总体上我并不介意。此外,我几乎从不使用\ continuation字符,因为我利用列表中的隐式连续。


1
当在任意位置(如79个字符)添加换行符时,我发现代码看起来很混乱。例如PEP 8中的class Rectangle示例。我看第一个if语句,必须查看每一行以找到实际代码块的开始位置。有三行if语句和一个空格添加到代码块中。这让我感到困惑。 - dave
2
我发现阅读那个相当长的if语句很容易。行长上的断点不一致,但它们总是通过连词运算符进行一致的分割。我也遇到了困难。此外,使用宽屏显示器可以将两个文件并排放置,这绝对是一个优势。 - Marco

4

我将我的编辑器设置为显示80个字符的限制线,并将其用作警告,而不是停止符。如果我可以在达到限制之前整齐地将行延续到下一行,我会这样做。但是,如果插入延续使其难以阅读或使其令人困惑,我就会保留长行。我不会为了指南而使代码更难阅读。


1
我同意。这就是我所做的。对我来说,这是最合乎逻辑的答案。 - Robin

3

没有办法。

✔ 我的论点:

  • 超过80个字符的任何内容都是较不重要的逻辑部分(如果需要,人们可以向右滚动)。
  • 强制执行此规则会使那些不重要的代码在我的眼前混乱。
  • 人们必须经常垂直滚动大距离,而不是偶尔水平滚动。
  • 现代大多数编辑器都有“软换行”功能,可以自动化任何长度限制的选择(不仅仅是80)。
  • 现代编辑器中的“软换行”只需按下一个按键即可,这意味着如果保留行,就可以同时获得最佳效果。

Linus Torvalds的论点:

  • 如果字符串被切割在意外位置,grep或“查找文件”将失败。

  • 垂直限制(VT100终端)比80个字符的水平限制更痛苦。

✔ 结论:

It's like try-
ing to read
a news arti-
cle written
like this.

1
谢谢提供参考。我也同意Linus的想法:“80个字符导致了太多愚蠢的更改”。 - jjmontes

2
如果这是你自己的代码库,你可以随心所欲地编写。但如果是别人的代码库,那么你就必须遵循他们的规则。例如,Google使用两个字符缩进,而PEP 8建议使用4个空格。我相信Guido有一句话是关于白天用2个空格缩进编程,晚上用4个空格缩进编程的。
即使在宽屏幕监视器上,我也喜欢有一个字符限制,因为这样我可以将代码框并排放置。
代码风格真正重要的是一致性。所以请以任何让你感到愉快的方式编写你的python代码。

4
2个空格的缩进是一种轻微的混淆形式。 - Glenn Maynard
3
使用 4 个空格缩进浪费空间。 - Nick Bastin
5
那我们就统一使用三个空格缩进,好吗? :) - MaxVT
我已经使用3个空格缩进相当一段时间了。 - Robin

1
只要你的宽屏幕不需要横向滚动(因为我见过这种情况),就可以了。

1
任何合格的程序员编辑器都能够处理偶尔出现的换行,而不需要水平滚动。 - Glenn Maynard
5
IDE对于长行自动换行的决策可能比人类的决策更糟糕。 - eumiro

0

PEP8是为人类而设的,但即使您不遵循它,您的程序也会运行。

如果您不分享代码并且没有计划这样做,那么可以随心所欲。

如果您计划将来分享代码的某些部分,那么应该遵循PEP8。我的意思是,如果几行代码超过了85个字符,可能没有人会在意。但是,如果代码一直超过200个字符宽度,阅读起来会很困难。如果您曾经阅读过报纸,当使用列格式化文本时,同样存在这个问题。

解决行长度问题的方法既不是任意的断行和续行字符,也不是使用括号将某些表达式包含在内部进行隐式行续。它可能是引入中间变量和函数,以便逻辑上在少于79个字符的情况下进行代码分割。

顺便说一句,您可能希望坚持更严格的限制。我更喜欢72个字符,因为我可以在80个字符的文本邮件中允许一个或两个额外的引用级别。如果不这样做,缩进将在第一个引用处中断。


0

与所有风格指南一样,它只是一个指南。你是否遵循它取决于你自己。主要目标是保持一致性。

话虽如此,我建议采用约80个字符的限制,原因如下:

  1. 它使复杂的代码更易于阅读。
  2. 现在养成习惯,以备在协作项目中使用。
  3. 它显示出专业素养。

6
“它展现了专业性。” — 你能详细说明一下你的意思吗?我发现人们经常在想让别人做某事时使用“专业性”这个词,但并没有实际的理由。 - Paul D. Waite
3
如果你看电影剧本,它们都遵循特定的格式。因此,当你遇到不按照这种格式编写的剧本时,你会认为作者是业余的。我以同样的方式看待代码。当我看到不遵循一些基本风格指南的代码时,我会自动地认为编程人员没有太多的编程经验。所以在这种情况下,我将“专业性”定义为1)你知道自己在做什么,2)你了解通用的编码实践。 - Garrett Hyde
在2022年,这更多地成为个人偏好。对于你来说,超过80个字符“可以使复杂的代码更易读”。而对我来说,80个字符的限制会让我的代码非常难以阅读。在调试时它会让我感到烦躁,也让我编码速度减慢。至于协作项目,我的所有同事都没有使用80个字符的限制。我将字符限制设置为最舒适和最有生产力的状态。我知道,在我看来专业的东西可能不被所有人认同,反之亦然。 - Robin

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