Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python核心库和PEP8_Python_Pep8 - Fatal编程技术网

Python核心库和PEP8

Python核心库和PEP8,python,pep8,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()

我试图理解为什么说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
所以我的问题是:核心库中是否使用了PEP8?为什么会这样?
是否存在与PHP中相同的情况,即我不能只记住函数的名称,因为有可能所有的方法都可以写入名称


为什么核心库中甚至没有为新函数使用PEP 8?

Python标准库没有受到严格的控制,模块的样式也各不相同。我不确定您的示例是为了说明什么,但Python的库确实不像Java的库或Win32那样只有一个声音。这种语言(和图书馆)是由一个全是志愿者的团队建立的,没有任何公司向致力于这种语言的人支付工资,而且有时会表现出来

当然,我相信其他因素超过了这一负面影响,但它仍然是负面影响。

来自PEP8:

但最重要的是:知道什么时候该做 不一致——有时是风格 指南根本不适用。当有疑问时,运用你的最佳判断。看 在其他例子中,确定什么看起来最好。不要犹豫 问


您在这里提到的内容在某种程度上与PEP8指南一致;实际上,主要的不一致之处在于其他部分,通常是CamelCase。

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

  • 与其他API(例如当前模块或标准接口)的一致性
  • 因为省略它们不会损害可读性(甚至提高可读性)
要解决您引用的具体示例,请执行以下操作:

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

  • move_to_end
    是全新的。尽管有其他省略下划线的方法,但它还是遵循了PEP 8推荐的使用下划线的惯例,因为
    movetoend
    很难阅读(主要是因为
    toe
    是一个单词,所以大多数人的大脑在注意到
    nd
    后都必须进行备份和重新分析)

  • set\u debuglevel
    (以及较新的
    set\u tunnel
    )可能应该省略下划线,以便与
    HTTPConnection
    API的其余部分保持一致。然而,原始作者可能只是更喜欢
    set_debuglevel
    而不是
    setdebuglevel
    (注意
    debuglevel
    也是
    HTTPConnection
    构造函数的一个参数,解释了缺少第二个下划线的原因),然后
    set_tunnel
    的作者简单地遵循了该示例

  • set\u tunnel
    实际上是另一种删除下划线会损害可读性的情况。
    settunnel
    中的两个“t”并置不利于轻松解析


一旦这些不一致成为Python发布模块,通常就不值得费心去纠正它们(这样做是为了将Python 2和Python 3之间的
threading
module接口反Java化,而且这个过程非常烦人,没有其他人愿意“修复”受类似风格问题影响的任何其他API)。

请查看核心库中的
unittest
模块。。。全是骆驼箱!