我正在为一个约30名开发人员的团队编写一套python编码指南.作为我的文档的基础,到目前为止,我已经研究了谷歌python风格指南和PEP 8风格指南,并结合了两者的信息.
谷歌风格指南比PEP 8更具限制性的地方是进口.Google指南要求开发人员仅导入包和模块,然后通过更合格的名称引用其中的项目.例如:
from pkg import module
...
my_class = module.MyClass()
Run Code Online (Sandbox Code Playgroud)
理由是"每个标识符的来源以一致的方式表示".对于我们的项目,我们打算使用两个或三个级别的包进行组织,因此要了解标识符的完整来源,读者可能还需要检查import语句.我想提倡这种导入方式作为"首选风格":
from pkg.module import MyClass
...
my_class = MyClass()
Run Code Online (Sandbox Code Playgroud)
恕我直言,当名称更简洁时,改进了列表推导等python结构中的可读性.
我不清楚的是python解释器可能在幕后做什么.例如,MyClass现在是该模块的全局命名空间的一部分,还是该模块的所有导入器?(这会很糟糕,可能会导致一些奇怪的错误;如果这是真的,我会提倡谷歌风格).
我的python开发经验仅限于6个月(我们的项目专家咨询的人数不多),所以我希望从社区获得更多信息.以下是我已经研究过的一些项目:
谢谢您的反馈!
在Python中,不存在跨多个模块的全局变量.如果这样做from pkg.module import MyClass,则MyClass在您执行该操作的模块的全局命名空间中,而不是任何其他模块(包括导入导入MyClass的模块的模块).
至于你更普遍的问题,根据具体情况,任何一种进口机制都是可以接受的.如果模块名称很长,您可以通过以不同的名称导入它来获得一些缩短:
# Awkward
from package import reallylongmodule
reallylongmodule.MyClass()
# Less awkward
from package import reallylongmodule as rlm
rlm.MyClass()
Run Code Online (Sandbox Code Playgroud)
如果类名称足够独特,您可以告诉它来自何处以及它是什么,那么仅导入该类就可以了.但是,如果您有多个模块定义具有相对不同名称的类(例如,"处理器","单元","数据","管理器"),那么通过模块名称访问它们以澄清是个好主意你在做什么.
风格指南最终是指南而非法律.我自己的偏好是选择一种最大化清晰度和可读性的机制.这需要在避免冗长和繁琐的名称之间进行权衡,同时避免使用简短,模糊或含糊的名称.如何进行权衡取决于您正在使用的特定库以及您如何使用它们(例如,您导入的模块数量,从中导入的数量).