为避免循环导入,可以使用import x
,然后每次都使用x.func
。 (参见Circular (or cyclic) imports in Python)。 (就我而言,我实际上别无选择)
但是,当x
例如a.b.c.d.e
时,您会得到一个不可忽略的开销(除了可读性问题),特别是如果您的函数被重复调用。我想知道在解决导入时是否存在某种机制来定义E = a.b.c.d.e
之类的快捷方式? (或者每次都要避免查找的内容)
注意:在pypy上,没有性能差异,但在CPython上,a.A()
和a.b.c.d.e.f.g.h.A()
之间可以获得×2的改善
修改
关于import ... as ...
解决方案,
这是我得到的痕迹(我认为它比我能给出的任何解释更清晰):
File "MyApp/__init__.py", line 3, in <module>
import MyApp.core
File "MyApp/core.py", line 3, in <module>
import MyApp.formatters.ASCIIFormatter as _F
File "MyApp/formatters/__init__.py", line 2, in <module>
import MyApp.formatters.ASCIIFormatter as ASCIIFormatter
File "MyApp/formatters/ASCIIFormatter.py", line 2, in <module>
import MyApp.core as _C
AttributeError: module 'MyApp' has no attribute 'core'
答案 0 :(得分:0)
您可以在导入模块时设置别名:
import a.b.c.d.e as E
您发布的代码也可以使用,但它并不漂亮:
import a.b.c.d.e
E = a.b.c.d.e