Python:导入“导入文件”
我在导入很多不同的脚本,所以我文件的顶部被导入语句搞得乱七八糟,比如:
from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
...
有没有办法把这些导入语句放到别的地方,然后我只需要导入那个文件,这样就只需要一个干净的导入了?
2 个回答
23
当然可以;只需要在你的主文件所在的同一个文件夹里创建一个叫做 myimports.py
的文件,然后把你需要导入的内容放进去。接着,在你的主脚本里只需使用 from myimports import *
就可以了。
39
我强烈建议你不要这样做。你又犯了全局包含文件的错误。虽然现在只有一个模块在引入你所有的模块(而不是所有模块都引入一个全局模块),但关键是,如果这些模块有合理的理由被归在一个共同的名字下,那也可以。如果没有理由,那它们应该保持为独立的包含。原因在于文档。如果我打开你的文件,只看到一个引入,我就不知道引入了什么,来自哪里。相反,如果我有一个引入列表,我可以一眼看出需要什么,不需要什么。
还有一个重要的错误我想你可能也在犯。当你说
from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
我猜你是在引入一个类,比如这样
from somewhere.fileA import MyClass
这是错误的。这个替代方案要好得多
from somewhere import fileA
<later>
a=fileA.MyClass()
为什么呢?有两个原因:首先是命名空间。如果你有两个模块都有一个叫 MyClass 的类,就会发生冲突。第二是文档。假设你使用了第一个选项,我在你的代码中发现了以下这一行
a=MyClass()
现在我完全不知道这个 MyClass 是从哪里来的,我得在你所有的文件中到处查找才能找到它。用模块名来限定它,可以让我立即明白它的来源,并且可以通过搜索快速找到 fileA 模块在你的程序中使用的地方。
最后一点:当你说“fileA”时,你犯了一个错误。这里是模块(或包),而不是文件。模块对应文件,包对应目录,但它们也可以对应到 egg 文件,甚至你可以创建一个没有文件的模块。这是概念的命名问题,属于一个侧面的问题。