Python核心库和PEP8

时间:2011-02-28 23:14:00

标签: python pep8

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

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

以下函数是Python 3.1中的新功能。这里使用了PEP 8惯例的哪一部分?

popitem()
move_to_end()
http://docs.python.org/py3k/library/collections.html

所以我的问题是:PEP 8是否在核心库中使用?为什么会那样?
是否存在与PHP相同的情况,我不能只记住函数的名称,因为有可能编写名称的所有方法?

为什么即使是新功能,PEP 8也不会在核心库中使用?

3 个答案:

答案 0 :(得分:10)

PEP 8建议使用下划线作为默认选择,但通常将其排​​除在外有两个原因:

  • 与其他API(例如当前模块或标准接口)的一致性
  • 因为将它们排除在外并不会损害可读性(甚至改善它)

要解决您引用的具体示例:

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

  • move_to_end是全新的。尽管该对象省略了下划线的其他方法,但它遵循推荐的使用下划线的PEP 8惯例,因为movetoend难以阅读(主要是因为toe是一个单词,所以大多数人的大脑将不得不支持一旦他们注意到nd

  • ,就进行重新分析
  • set_debuglevel(以及较新的set_tunnel)应该留下下划线以与HTTPConnection API的其余部分保持一致。但是,原作者可能只是偏好set_debuglevelsetdebuglevel(请注意debuglevel也是HTTPConnection构造函数的参数,解释缺少第二个下划线)和然后set_tunnel的作者只是按照那个例子。

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

一旦这些不一致使其成为Python发布模块,通常不值得尝试和纠正它们的麻烦(这是为了解密Python 2和Python 3之间的threading模块接口,而且这个过程很烦人,以至于没有其他人自愿“修复”任何其他被类似风格问题困扰的API。)

答案 1 :(得分:4)

来自PEP8:

  

但最重要的是:知道什么时候成为   不一致 - 有时是风格       指南只是不适用。如有疑问,请使用您的最佳判断。看       在其他例子,并决定什么看起来最好。并且不要犹豫   问!

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

答案 2 :(得分:2)

Python标准库没有尽可能严格控制,模块的样式也各不相同。我不确定你的例子是什么意思,但是Python的库确实没有像Java那样的一个声音,或Win32。语言(和图书馆)由全志愿者组建,没有公司向致力于该语言的人支付工资,有时会显示。

当然,我认为其他因素超过了这个负面因素,但它仍然是负面因素。