为什么Python的日志记录模块不遵循PEP8约定?

Bor*_*jaX 34 python logging pep8

这只是一个历史目的的好奇心:

我想知道是否有人知道为什么广泛使用的(和核心模块)日志记录 不遵循Python的PEP-8命名约定.

例如,在

>>> import logging
>>> log = logging.getLogger("hello")
Run Code Online (Sandbox Code Playgroud)

我希望它是get_logger,但事实并非如此.

功能名称方面,PEP8标准说:

只有在已经是主流风格(例如threading.py)的上下文中才允许使用mixedCase,以保持向后兼容性.

那是这样的吗?如果是这样,还有什么其他logging东西必须保持向后兼容性?或者仅仅是开发人员logging感觉喜欢使用驼峰式命名?

当然,该模块已有详细记录,并不是什么大不了的事.我只是好奇.

Mar*_*ers 35

logging模块由一家独立公司于2001年开发,主要基于Log4j.因此,它遵循原作者选择的命名约定,这反映了Log4j的选择; 后者也有一种getLogger()方法.

直到一年之后,PEP 282才建议将其添加到标准库中,此时命名约定一成不变.

这是已知问题,但它不是唯一违反PEP的包.来自链接的Wiki:

PEP8说 - 与这种风格指南的一致性非常重要.项目的一致性更为重要.一个模块或功能内的一致性是最重要的.

  • 如此正确,但不能改变,因为向后兼容.logging2也许吧. - techtonik
    • 它现在是一个低优先级,除非有一个主动确保stdlib的其余部分符合PEP8. - VinaySajip

最后但同样重要的是,样式指南本身就可以说明应用样式指南:

愚蠢的一致性是小思想的大人物

风格指南是关于一致性的.与此风格指南的一致性非常重要.项目的一致性更为重要.一个模块或功能内的一致性是最重要的.

但最重要的是:知道何时不一致 - 有时风格指南不适用.如有疑问,请使用您的最佳判断.查看其他示例并确定最佳效果.并且不要犹豫!

特别是:不要为了遵守这个PEP而破坏向后兼容性!

'修复' logging会破坏向后兼容性,这是不值得的.

  • 许多模块提供两种版本的API(uglyCase和python_case),完​​全是为了向后兼容. (9认同)
  • '不修复'`logging`(和其他人),即在保持BC的同时不提供合理的别名,这就是PHP仍然被嘲笑的原因. (6认同)
  • @rr:模仿PHP的原因还有很多,而不仅仅是命名不一致. (3认同)