Python核心库和PEP8

2024-04-23 15:15:18 发布

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

我试图理解为什么Python被认为是一种漂亮的语言。我被引导到pep8的美丽。。。很奇怪。事实上,它说你可以使用任何你想要的惯例,只要保持一致。。。突然我在核心库里发现了一些奇怪的东西:

request()
getresponse()
set_debuglevel()
endheaders()
http://docs.python.org/py3k/library/http.client.html

以下函数是Python3.1中的新功能。这里使用PEP8约定的哪一部分?在

^{pr2}$

所以我的问题是:pep8是否用于核心库?为什么会这样?
是否存在与PHP中相同的情况,即我无法仅仅记住函数的名称,因为有各种可能的方法来编写函数名?在

为什么核心库中甚至新函数都没有使用pep8?在


Tags: 函数org语言httpdocs核心requestpy3k
3条回答

Python标准库没有尽可能严格地控制,模块的样式也各不相同。我不确定您的示例是要说明什么,但是Python的库确实没有一个声音,就像Java的库一样,也没有Win32。语言(和图书馆)是由一个完全自愿的工作人员建造的,没有任何公司向致力于这门语言的人支付薪水,它有时会显示出来。在

当然,我相信其他因素会超过这个负面因素,但它仍然是一个负面因素。在

PEP 8建议使用下划线作为默认选择,但省略下划线通常出于以下两个原因之一:

  • 与其他API(例如当前模块或标准接口)的一致性
  • 因为省略它们不会影响可读性(甚至可以提高可读性)

要说明您引用的具体示例:

  • popitemdict对象的长期方法。其他采用它的api保留了这种拼写(即没有下划线)。

  • move_to_end是全新的。尽管对象上有其他方法省略下划线,但它遵循了pep8推荐的使用下划线的约定,因为movetoend很难阅读(主要是因为toe是一个单词,所以大多数人的大脑一旦注意到nd),就必须进行备份并重新分析。

  • set_debuglevel(以及更新的set_tunnel)可能应该省去下划线,以便与HTTPConnectionAPI的其余部分保持一致。然而,最初的作者可能只是倾向于set_debuglevel而不是{}(注意,debuglevel也是HTTPConnection构造函数的一个参数,解释了缺少第二个下划线),然后{}的作者简单地遵循了这个例子。

  • set_tunnel实际上是另一种情况,删除下划线可能会损害可读性。将settunnel中的两个“t”并置不利于容易的解析。

一旦这些不一致变成了Python发布模块,那么尝试并纠正它们通常是不值得的(这样做是为了将python2和python3之间的threading模块接口反Java化,而且这个过程非常烦人,以至于没有人主动“修复”任何其他受类似风格问题困扰的api)。在

来自PEP8:

But most importantly: know when to be inconsistent sometimes the style guide just doesn't apply. When in doubt, use your best judgment. Look at other examples and decide what looks best. And don't hesitate to ask!

您在这里提到的内容与PEP8指南有些一致;实际上,主要的不一致是在其他部分,通常是CamelCase。在

相关问题 更多 >