为什么Python的日志模块不遵循PEP8规范?
这只是出于好奇,想了解一些历史背景:
我在想,有没有人知道为什么这个非常常用的核心模块 logging 不遵循 Python 的 PEP-8 命名规范。
比如,在
>>> import logging
>>> log = logging.getLogger("hello")
我本来期待它应该叫 get_logger
,但实际上并不是。
关于 函数命名,PEP8 标准说:
混合大小写(mixedCase)只在已经是主流风格的情况下允许使用(例如 threading.py),以保持向后兼容。
这是不是就是情况?如果是的话,它需要和哪些其他的 logging
相关东西保持向后兼容呢?还是说 logging
的开发者就是想用驼峰命名法?
当然,这个模块的文档写得很好,根本不是什么大问题。我只是好奇。
1 个回答
logging
模块是在2001年由一家独立公司开发的,主要参考了Log4j这个工具。因此,它的命名方式和原作者选择的方式很相似,也和Log4j的选择一致;Log4j也有一个getLogger()
方法。
直到一年后,PEP 282才提议将这个模块加入到标准库中,这时候命名方式已经固定下来了。
这个模块有一个已知问题,但并不是唯一一个违反PEP的模块。从链接的维基页面来看:
PEP8说 - 遵循这个风格指南的一致性很重要。在一个项目中保持一致性更重要。在一个模块或函数内保持一致性是最重要的。
- 这确实很重要,但因为要保持向后兼容性,所以不能改变。也许可以考虑logging2。 -- techtonik
- 现在这不是优先事项,除非有计划确保标准库的其他部分符合PEP8。 -- VinaySajip
最后但同样重要的是,风格指南本身对应用风格指南有这样的看法:
愚蠢的一致性是小心眼的魔鬼
风格指南是关于一致性的。遵循这个风格指南的一致性很重要。在一个项目中保持一致性更重要。在一个模块或函数内保持一致性是最重要的。
但最重要的是:要知道什么时候可以不一致——有时候风格指南并不适用。当有疑问时,使用你的最佳判断。看看其他例子,决定什么看起来最好。并且不要犹豫去询问!
特别是:不要为了遵循这个PEP而破坏向后兼容性!
如果“修复”logging
模块,会破坏向后兼容性,这样做是得不偿失的。