4

我对 Python 比较陌生,我尝试学习“Pythonic”的做事方式,为 Python 开发打下坚实的基础。也许我想要实现的根本不是 Python,但我仍然在寻找解决这个问题的“正确”方法。

我正在构建一个应用程序,我正在为其创建模块。我刚刚注意到我的一个模块有 7 个不同的 .py Python 文件,它们都导入了 3 个不同的相同的东西。所以所有这些文件共享这些导入。

我尝试删除它们,并将这些导入插入到文件夹中的空init .py 中,但它没有起到作用。

如果可能的话,由于所有这些模块文件都需要这些导入,我不希望它们被一个一个地导入到每个文件中。

我可以做些什么来执行通用导入?

非常感谢您,我非常感谢您的帮助。

4

2 回答 2

4

正如Python 之禅所说,“显式胜于隐式”,这是一个很好的例子。

在导入中明确列出模块的依赖关系非常有用,这意味着文件中的每个符号都可以通过简单的文本搜索追溯到其来源。例如,如果您在文件中搜索some_identifier,您将在文件中找到定义,或者from some_module import some_identifier. 直接引用some_module.some_identifier. (这也是你不应该这样做的原因之一from module import *。)

在不丢失上述属性的情况下,您可以做的一件事是将您的三个共享模块导入第四个模块:

#fourth.py
import first
import second
import third

然后...

#another.py
import fourth

fourth.first.some_function()
#etc.

如果你不能忍受(它确实使调用更冗长,毕竟),那么重复三个导入就可以了,真的。

于 2012-12-29T20:28:57.900 回答
3

我同意 DrewV,这完全是 pythonic

文件1:

import xyz

import abc

...

文件2:

import xyz

以下链接也解决了一个几乎相同的问题:

一个公共模块的python多次导入

正如它所解释的,Python 完成了优化模块加载的工作,因此您可以编写多个导入语句而不必担心性能损失,因为模块只加载一次。事实上,列出每个文件中的所有导入可以明确地清楚每个文件所依赖的内容。

有关导入如何与命名空间交互的讨论,请参阅:

跨模块和全局变量的 Python 导入

于 2012-12-29T20:06:59.820 回答