许多Python库的代码质量相对较低吗?

2024-04-18 16:59:49 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:自从提出这个问题以来,标准Python科学库(这是目标领域)有了很大的改进。例如,numpy项目已经做出了很大的努力来改进docstring。人们仍然可以争论是否有可能从一开始就不断地解决这些问题。在


我有一个有点异端的问题:为什么这么多Python库代码混乱,不遵循标准的最佳实践?或者你认为这个观察是绝对不正确的吗?与其他语言相比情况如何?我对你的看法很感兴趣。在

我认为质量缺乏的一些原因:

  • docstring常常完全丢失或不完整,即使对于公共API也是如此。当一个方法接受*args**kwargs但没有记录可以给出哪些值时,这是很痛苦的。

  • 糟糕的Python编码实践,比如在__init__之外添加新属性。这样的事情使得代码很难阅读(或维护)。

  • 几乎没有任何库遵循PEP8编码约定。有时这些约定在一个文件中甚至不一致。

  • 整体设计凌乱,没有清晰的API。似乎没有完成足够的重构。

  • 单元测试覆盖率低。

别误会我,我绝对喜欢Python及其生态系统。尽管我与这些库进行了艰苦的斗争,但它们通常都能完成任务,我对此表示感谢。但我也认为,由于这些问题,开发人员的大量时间最终都被浪费了。也许这是因为Python给了你太多的自由,以至于很容易写出不好的代码。在


Tags: 项目代码numpyapi语言编辑目标编码
3条回答

首先,您需要认识到Python并不是在2.x版本前后由Guido的负责人发展而来的,它是在过去20年中发展起来的。在

事实上,您提到的许多东西(例如unittest和PEP-8)在一些标准库首次编写时甚至不存在。在

您可能会注意到,您所查看的库越旧,它们就越有可能与当前的“最佳实践”产生分歧,这通常是因为它们早于这些实践被广泛采用之前。较新的图书馆更可能符合当前的做法。在

此外,有时也有一个很好的理由让他们跟上时代。假设您有数万行针对当前Python库编写的代码。现在,其中一个库的维护者决定更改库,使类和函数名符合PEP-8。现在每个拥有工作代码的人都必须重新访问大量的代码,以免重命名会破坏程序。在

这并不是说在Python库中没有可以改进的地方——有!但在完美和完成任务之间总有一个权衡。这就是他们说“实用性胜过纯洁性”的原因之一

关于文档,不仅仅是Python。如果说有一个因素阻碍了开放源码软件的广泛采用,那就是,IMHO,大多数开放源码软件项目的文件编制水平实在是太糟糕了。这从代码级别开始,扩展到用户文档。我可以对任何一个在OSS上工作的人说:

a)注释代码!没有自我记录的代码!在

b)将项目时间预算的至少25%用于最终用户文档。在

我确实不太清楚我在说什么——我有自己的几个OSS项目,我为其他几个项目做过贡献,我几乎完全使用OSS。昨天,我花了4个多小时试图构建一个主要的OSS项目(没有名字,没有打包练习),但由于糟糕的、自相矛盾的文档而失败了。在

Instead the authors each seem to follow their own glorious convention. And sometimes the conventions are not even consistent with the same file of a library

欢迎来到真实世界的精彩代码!在

我所遇到的FWIW Python代码并不比任何其他语言中的更好或更差。在

(显然,这比一般的PHP项目要好,但这并不公平。)

相关问题 更多 >