首先来说一下两者的区别:

  import指令做了两件事:1)搜索module,2)绑定到局部变量
  内置函数__import__()只做了一件事:搜索module

  import指令执行过程中是调用__import__()来完成Module检索的。

搜索module的过程:

在了解搜索的过程前,先来了解一下内部实现中的几个角色:
         a)已经搜索过的module会存在于一个module缓存(sys.modules)中。
         b)finders | importers: 用于搜索module在哪里,找到后返回的是module-spec (包含Module在哪里,该用那个loader进行加载等信息)。
                    其中finders是从build-in 模块中找,importers是从其他位置找。
                    importers是可扩展的,可以支持文件系统某个路径、zip、urls。
         c)loaders: 依据modulespec 进行加载,生成python中的module
                    module = modulespec.loader.load_module(modulespec.name)

搜索过程如下:

1)如果要搜索的module 的name 在缓存(sys.modules )中,则进行如下操作:
      1.1)如果值是None,抛出 ModuleNotFoundError
      1.2)值不是None,直接返回值
2)由finders从内置模块里找,找不到由importer去找,importers也找不到,module的name到缓存,值为None,然后raise ModuleNotFoundError。
             在使用importers去找的时候,如果发现了有.pyc,需要先检查.pyc是否最新。
             找到后,返回 生成创建一个module-spec
3)由module-spec中的loader去加载并执行module:
             module = modulespec.loader.load_module(modulespec.name)
             sys.modules[modulespec.name] = module
             modulespec.loader.exec_module(module)
4)最终没有找到,记录module的name到缓存,值为None,然后 raise ModuleNotFoundError

想要了解更多,可以参考 https://docs.python.org/3/reference/import.html

python3 import 和__import__() 的区别相关推荐

  1. python __import__和import区别_Python中import 与__import__() 之间的区别比较

    本篇文章给大家带来的内容是关于Python中import 与__import__() 之间的区别比较,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先来说一下两者的区别: impo ...

  2. Python3.5 ‘wb’与‘w’区别以及写入excel的常见错误

    Python3.5 'wb'与'w'区别以及写入excel的常见错误 望共同进步 转载请注明地址:http://blog.csdn.net/weixin_39701039/article/detail ...

  3. Windows anaconda python3 import ssl报错的解决方案

    Windows anaconda python3 import ssl报错的解决方案_dailinqing1984的博客-CSDN博客

  4. import和require的区别

    原文地址:https://www.cnblogs.com/sunshq/p/7922182.html import和require的区别 node编程中最重要的思想就是模块化,import和requi ...

  5. python输入和输出的区别_python2和python3的输入和输出区别介绍

    Python3 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdou ...

  6. python搞笑语句_云计算开发学习笔记:Python3 import语句

    原标题:云计算开发学习笔记:Python3 import语句 想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: 当解释器遇到 import 语句,如果模块在当前的 ...

  7. python3 x和python2 x区别_Python3.x和Python2.x的区别

    这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和 ...

  8. python3 x和python2 x区别_Python知识:Python 3.x和2.x版本的使用区别

    使用Python时都需要安装相应的版本,不同的版本适用性也不一样. 今天从除法算子.打印功能.Unicode.Xrange.错误处理.未来模块方面看看Python2.x和Python3.x之间的区别. ...

  9. python3 x和python2 x区别_Python3.x和Python2.x的区别(转存参考)

    这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和 ...

最新文章

  1. Jquery的$命名冲突
  2. 设计模式--迭代器(Iterator)模式
  3. Django之ORM对数据库操作
  4. python OCR 图形识别
  5. sql server从一个数据库复制一张表到另外一个数据库
  6. R语言数据导出(数据保存、导出、持久化到本地指定目录文件)、使用xlsx包的write.xlsx函数将dataframe导出为excel文件xls格式、而非xlsx格式
  7. 计算机毕业设计java+jsp报刊订阅信息网站(源码+系统+mysql数据库+Lw文档)
  8. 使用计算机制作数字文本结构 可以,使用计算机制作的数字文本结构,可以分为线性结构与非线性结构,简单文本呈现为一种结构,写作和阅读均按顺序进行。(1.0分)...
  9. android 五种存储方式,android数据五种存储
  10. 1.一条SQL语句如何执行
  11. 学习 瑞吉外卖项目——总结
  12. 计算机正确的录入指法教案,《文字录入教案》word版.doc
  13. 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树
  14. 数一英一408,超高分数线392分!上海交大计算机学硕
  15. No.054<软考>《(高项)备考大全》【冲刺8】《软考之 119个工具 (6)》
  16. MaxCompute2.0助力众安保险高速成长
  17. JDO是什么意思?JDO使用实例
  18. PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-初始化设置
  19. PACS医疗系统管理源码
  20. 不见棺材不落泪,不到黄河不死心

热门文章

  1. 【NLP】Attention Model(注意力模型)学习总结
  2. VR跨界一触即发,探秘87870“魔都之夜”VR派对
  3. 在visualstudio中使用Qt
  4. 同步 异步 阻塞 非阻塞概念区分
  5. 在C#中使用官方驱动操作MongoDB
  6. open*** 启动报错
  7. Javascript:字符串分割split()妙用
  8. Thinking in C++ Notes 名字控制
  9. UML中的stereotype
  10. sa执行命令方法总结