0

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

importlib包装的目的有两个。

一种是 在 Python 源代码中提供语句实现(因此,通过扩展, 函数) 。这提供了一个可移植到任何 Python 解释器的实现。这也提供了一种比用 Python 以外的编程语言实现的实现更容易理解的实现。import__import__()import

第二,要实现的组件import在此包中公开,使用户更容易创建自己的自定义对象(通常称为导入器)以参与导入过程。

是不是说import语句和builtin.__import__()函数默认都是基于importlib.__import()函数实现的?

但是https://stackoverflow.com/a/44655619/156458暗示 默认情况下builtins.__import__没有实现importlib.__import__

https://docs.python.org/3/library/functions.html# import表示 该语句buitlins.__import__调用了该函数。import所以如果默认builtins.__import__不基于实现importlib.__import__,该import语句也不会基于importlib.__import__默认实现。

4

1 回答 1

3

不,实际的导入代码是 Python 代码的一个端口。查看函数的实现PyImport_ImportModuleLevelObject()builtins.__import__基本上是一个轻量级的 Python->C 包装器),其中包含注释:

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

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

您对重点的使用使我相信您误读了文档;importlib不是import语句执行。这是Python 源代码中import语句的实现,与 C 代码中 import 语句的实现形成对比。

于 2017-06-20T15:19:36.297 回答