【问题标题】:Automatically import to all Python files in the given folder?自动导入给定文件夹中的所有 Python 文件?
【发布时间】:2012-12-14 15:38:45
【问题描述】:

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

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

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

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

如何执行通用导入?

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

【问题讨论】:

  • 进口很便宜。在多个位置导入同一个模块不会有问题。
  • 我认为您不应该使用通用导入,而是在每个文件中显式导入依赖项。

标签: python python-2.7 python-2.x python-module


【解决方案1】:

我同意 DrewV,这样做完全符合 Python 风格

文件1:

import xyz

import abc

...

文件2:

import xyz

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

python multiple imports for a common module

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

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

Python imports across modules and global variables

【讨论】:

    【解决方案2】:

    正如Zen of 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.
    

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

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2016-10-14
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      相关资源
      最近更新 更多