是`import`语句和`builtin .__ import __()`函数默认是基于`importlib .__ import()`函数实现的?

时间:2017-06-20 15:14:03

标签: python python-3.x python-import python-internals python-importlib

来自https://docs.python.org/3/library/importlib.html

  

importlib包的目的是双重的。

     

一个是提供    import声明实施(因此,通过扩展,   Python源代码中的 the __import__() function )。这提供了一个   可以移植到任何Python解释器的import的实现。   这也提供了更容易理解的实现   而不是用Python之外的编程语言实现的。

     

二,实现import的组件在此包中公开,   使用户更容易创建自己的自定义对象(已知   通常作为进口商)参与进口过程。

这是否意味着import语句和builtin.__import__()函数默认是基于importlib.__import()函数实现的?

但是https://stackoverflow.com/a/44655619/156458意味着 默认情况下,builtins.__import__未基于importlib.__import__实施。{/ 1}

https://docs.python.org/3/library/functions.html#importbuitlins.__import__语句调用import函数。因此,如果builtins.__import__默认情况下未基于importlib.__import__实施,则import语句默认情况下不会基于importlib.__import__实现。

1 个答案:

答案 0 :(得分:2)

不,实际的导入代码是Python代码的端口。请参阅implementation of the PyImport_ImportModuleLevelObject() functionbuiltins.__import__基本上是一个简单的Python-> C包装器),其中包含注释:

/* The below code is importlib.__import__() & _gcd_import(), ported to C
   for added performance. */

因此,对于性能原因import使用C优化代码,而不是importlib的Python实现。这两个实现保持同步,但是,如果您要创建一个拉取请求,那么Python核心开发人员会在接受您的更改之前要求您更新另一个。

您对重点的使用使我相信您误读了文档; importlib不是导入语句的实现。这是在Python源代码中执行import语句 ,与在C代码中 的实现相反/强>