当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《许多Python库的代码质量相对较低吗?》经验,为你挑选了9个好方法。

编辑:由于这个问题被要求在标准Python科学库(这是目标区域)中发生了很多改进.例如,numpy项目已经做了很大的努力来改进文档字符串.人们仍然可以争论是否有可能从一开始就不断解决这些问题.


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

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

即使对于公共API,文档字符串也经常完全缺失或不完整.当一个方法采用*args并且**kwargs没有记录可以给出哪些值时,这很痛苦.

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

几乎没有任何库遵循PEP8编码约定.有时,约定在单个文件中甚至不一致.

整体设计很乱,没有明确的API.似乎没有进行足够的重构.

单位测试覆盖率差.

不要误会我的意思,我非常喜欢Python及其生态系统.即使我在这些图书馆中挣扎,他们通常也会完成工作,我很感激.但我也认为,由于这些问题,最终浪费了大量的开发人员时间.也许这是因为Python为您提供了如此多的自由,以至于编写糟糕的代码非常容易.



1> 小智..:

关于文档,它不仅仅是Python.如果有一个因素阻碍了OSS的广泛采用,那么恕我直言,大多数OSS项目的文档真正可怕.这从代码级别开始,并扩展到用户文档.我可以对从事OSS工作的任何人说:

a)评论你的代码!没有自我记录代码这样的东西!

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

我隐约知道我在说什么 - 我有几个自己的OSS项目,我已经为其他几个项目做出了贡献,我几乎只使用OSS.昨天我花了4个多小时试图建立一个主要的OSS项目(没有名字,没有包钻),并且由于蹩脚,自相矛盾的文档而失败了.


+1我从来没有理解如何阅读100行代码,无论写得多好,都比阅读2个用英语写的句子更容易.Python最大的问题之一就是放弃了大量的遗弃软件项目.你开始使用一些流行的(当时)库,一年后开发人员变得无聊.从理论上讲,这很好; 它是OSS,所以其他人可以加强.在实践中,代码的记录很少,以至于它不实用.老实说,如果您不打算评论和记录您的代码,请不要首先发布它.

2> bobince..:

相反,作者每个人似乎都遵循他们自己光荣的惯例.有时,约定甚至与库的同一文件不一致

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

我见过的FWIW Python代码并不比其他语言更好或更差.

(好吧,显然比一般的PHP项目更好,但这不太公平.)



3> Tim Lesher..:

你需要意识到的第一件事是,在版本2.x的某个时候,Python并没有完全形成.它在过去二十年中不断发展壮大.

事实上,你提到的一些事情(例如,unittest,例如,PEP-8),在首次编写一些标准库时甚至都不存在.

你可能会注意到,你所看到的图书馆越老,它们就越有可能与当前的"最佳实践"产生分歧 - 通常是因为它们早于广泛采用这些实践.最近的图书馆更有可能符合当前的做法.

此外,有时候通常有充分的理由不让它们更新.想象一下,你有几万行代码针对当前的Python库编写.现在,其中一个库的维护者决定更改库以使类和函数名符合PEP-8.现在每个拥有工作代码的人都必须重新访问它,以免重命名破坏事物.

这并不是说Python库中没有可以改进的东西 - 有!但是在完美和完成任务之间总是需要权衡.这就是他们说"实用性超越纯洁"的原因之一.



4> Xolve..:

这是因为Python不是像Java或.Net这样的企业世界备份的.

如果我希望Sun推广我的Java库,我将遵循他们的指导方针.Python不是这种情况.我编写代码,人们发现它更好,它必须自己发展.

大多数Python开发人员也来自C++,C,Java,.Net等.他们从第一天就开始编写生产代码.感谢Python的简单性.恶性循环仍在继续.

即使我花了一个月的时间来到PEP8并重构我的代码.



5> Andrew Dalke..:

PEP 8随着时间的推移发生了变化.一些模块遵循较旧的建议.您可以看到使用PIL,它使用像"Image"这样的模块,其中模块包含单个主类,而不是模块名称的推荐小写,以及使用"c"前缀的C扩展,而不是更现代的" _" 字首.

一些库是由受Java和C++等其他领域传统影响很大的人开发的.这些人更经常使用CamelCase而不是PEP 8推荐的lowercase_with_underscores.

如果不参考斯特金定律,这里的答案就不完整:"百分之九十都是废话."



6> paxdiablo..:

PEP8是一种风格指南,而不是风格要求.它甚至声明你应该"知道何时不一致".就个人而言,我不喜欢其中的一些指导方针.我更喜欢camelCase,snake_case因为我已经习惯了.

我不经常查看我正在使用的库的源代码,除非它是绝对必要的(例如调试).我更喜欢这个库的文档足够充分,我从来不必查看源代码.

说真的,为什么你真正关心源代码matplotlib看起来像什么,只要它做它想要做的事情?

我同意你的遗漏docstrings(假设它们是公共元素而不是内部元素),但这不是记录库的唯一方法.


如果我试图帮助该项目,我会关心MatPlotLib上代码的可懂度.并且"没有人会看它"的想法不应成为编写垃圾代码的借口......

7> vartec..:

对于matplotlib,有一个项目来改进它的"pythoness" - http://www.scipy.org/PyLab

关于科学图书馆的事情是,它们是由科学家编写的,而不是由专业软件开发人员编写的.转移,那些科学家习惯写Fortran.问题是 - 你宁愿拥有工作代码还是漂亮的代码?



8> SingleNegati..:

百分之九十的[python库]是粗糙的,但百分之九十的都是粗糙的

- 鲟鱼法(释义)



9> 小智..:

听起来您已经发现代码质量不符合您期望的预期.也许来自学校,或最佳实践书籍或高级开发人员.

在几家公司工作之后,我发现自己经常被建议做单元测试,文档代码,使用版本/源代码控制(我已经采取的所有好建议),然后发现该建议的提供者很少自己遵循建议.

我会说你确实有正确的印象,有时代码质量很低,但只能根据你的期望.当然numpy和其他是非常有用的包,即使没有编码到你设定的标准.

标准是意见,如果你认为标准很低,那么你可以尝试通过贡献或者接受它们来帮助制定这些标准,并确保编写代码作为一个例子给你会发现自己掌管一天.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有