2011-06-01 111 views
5

我输入了很多不同的脚本,所以在我的文件的顶部它被import语句混乱,即:的Python:导入“导入文件”

​​

是否有移动所有的方式这些其他地方,然后我所要做的就是导入该文件,所以它只是一个干净的导入?

回答

4

当然有;只需在主文件所在的同一目录中创建一个名为myimports.py的文件,并将其导入到那里。然后,您可以在主脚本中简单使用from myimports import *

+2

请注意,除非特殊情况下,否则不应该这样做,如果您可以100%保证没有任何单一名称被遮蔽。请参阅http://docs.python.org/howto/doanddont.html#from-module-import – delnan 2011-06-01 18:54:34

+0

当然可以;这不是我在任何情况下都会主张的编码练习,但是我是谁来质疑这张海报的意图? :) – 2011-06-01 18:55:23

+2

这是常见的(并且对所有参与者都有好处)回答“我该怎么做<有缺陷的方法来处理X>”与“完全是什么X?......啊,是的,你可以像这样做得更好:.. 。“ – delnan 2011-06-01 18:56:45

11

我强烈建议不要做你想做的事。你在做global include file mistake again。尽管只有一个模块正在导入您的所有模块(与导入全局模块的所有模块相反),但剩下的一点是,如果所有这些模块都采用通用名称进行收集是有正当理由的,那就好了。如果没有理由,那么他们应该保持独立包含。原因是文件。如果我打开你的文件,并只看到一个导入,我不会得到任何关于什么是导入的以及它来自哪里的信息。另一方面,如果我有进口清单,我一眼就能知道需要什么,什么不需要。

此外,还有一个重要的错误,我假设你正在做。当你说

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的来源,我将您的所有文件的grep,以便找到它周围。通过使用模块名称进行限定,我可以立即明白其来源,并通过/ search立即找到程序中使用来自fileA模块的内容。

最后说明:当你说“fileA”时你犯了一个错误。有模块(或包),而不是文件。模块映射到文件,并将映射包映射到目录,但它们也可映射到蛋文件,甚至可创建一个根本没有文件的模块。这是概念的命名,这是一个横向问题。