Python:导入"导入文件"

MxL*_*evs 14 python python-import

我正在导入很多不同的脚本,所以在我的文件的顶部,它会被import语句弄得乱七八糟,即:

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
...
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ini 26

我强烈反对你想做什么.您正在再次执行全局包含文件错误.虽然只有一个模块正在导入所有模块(而不是导入全局模块的所有模块),但剩下的一点是,如果有一个有效的理由要以通用名称收集所有这些模块,那很好.如果没有理由,那么它们应该作为单独的包含.原因是文件.如果我打开您的文件,并且只看到一个导入,我不会获得有关导入内容和来源的信息.另一方面,如果我有进口清单,我一眼就知道需要什么,不需要什么.

此外,我认为你正在做的另一个重要错误.当你说

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
Run Code Online (Sandbox Code Playgroud)

我假设您正在导入,例如,像这样的类

from somewhere.fileA import MyClass
Run Code Online (Sandbox Code Playgroud)

这是错的.这种替代解决方案要好得多

 from somewhere import fileA 

 <later>

 a=fileA.MyClass()
Run Code Online (Sandbox Code Playgroud)

为什么?原因有两个:第一,命名空间.如果你有两个模块有一个名为MyClass的类,你就会发生冲突.第二,文件.假设您使用第一个选项,我在您的代码中找到以下行

 a=MyClass()
Run Code Online (Sandbox Code Playgroud)

现在我不知道这个MyClass来自哪里,为了找到它,我将不得不围绕你的所有文件.通过模块名称对其进行限定,我可以立即了解它的来源,并通过/ search立即找到来自fileA模块的内容在程序中使用的位置.

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


Tam*_*más 9

当然有; 只需创建一个myimports.py在主文件所在的同一目录中调用的文件,然后将导入文件放在那里.然后,您只需from myimports import *在主脚本中使用即可.

  • 请注意,除非在特殊情况下,并且您可以100%保证不会遮蔽单个名称,否则不应该这样做.请参阅http://docs.python.org/howto/doanddont.html#from-module-import (3认同)
  • 是的当然; 这不是我在任何情况下都会提倡的编码实践,但我有什么资格质疑海报的意图呢?:) (3认同)
  • 通常(并且对所有参与者都有好处)回答"我怎么做<X方式的缺陷">"X究竟是什么?...啊,是的.你可以做得更好:......" (3认同)
  • 当试图理解别人的代码时,十几个导入确实不错。 (2认同)