我试图理解为什么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也不会在核心库中使用?
答案 0 :(得分:10)
PEP 8建议使用下划线作为默认选择,但通常将其排除在外有两个原因:
要解决您引用的具体示例:
popitem
是dict
个对象的长期方法。采用它的其他API保留拼写(即没有下划线)。
move_to_end
是全新的。尽管该对象省略了下划线的其他方法,但它遵循推荐的使用下划线的PEP 8惯例,因为movetoend
难以阅读(主要是因为toe
是一个单词,所以大多数人的大脑将不得不支持一旦他们注意到nd
)
set_debuglevel
(以及较新的set_tunnel
)应该留下下划线以与HTTPConnection
API的其余部分保持一致。但是,原作者可能只是偏好set_debuglevel
到setdebuglevel
(请注意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。语言(和图书馆)由全志愿者组建,没有公司向致力于该语言的人支付工资,有时会显示。
当然,我认为其他因素超过了这个负面因素,但它仍然是负面因素。