如何避免使用具有完整合格名称的Python中的查找开销,以避免循环进口问题



要避免循环导入,可以使用import x,然后每次使用x.func。(参见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'

导入模块时可以设置一个别名:

import a.b.c.d.e as E

您发布的代码也可以正常工作,但是它不那么漂亮:

import a.b.c.d.e
E = a.b.c.d.e

最新更新