美文网首页
python import机制

python import机制

作者: 小武子 | 来源:发表于2015-11-29 12:57 被阅读758次

最近遇到这么一个问题,就是分词的jieba在我的工程里面logging的level设置无效。于是乎,我就去翻阅是不是这块儿引用出了问题。我就顺便学习一下python的import机制。

讲解

from B import D,Python内部会分成几个步骤:

  1. 在sys.modules中查找符号"B"
  2. 如果符号B存在,则获得符号B对应的module对象<module B>
  • 从<module B>的dict中获得符号"D"对应的对象,如果"D"不存在,则抛出异常
  1. 如果符号B不存在,则创建一个新的module对象<module B>,注意,这时,module对象的dict为空
  • 执行B.py中的表达式,填充<module B>的dict
  • 从<module B>的dict中获得"D"对应的对象,如果"D"不存在,则抛出异常

例子

这块儿有个嵌套引用的例子,我觉得很经典,放在这里,做个记录。

#A.py
from B import D
class C:
    pass

#B.py
from A import C
class D:
    pass

运行A.py的时候,在python里面会这么运行:

  1. 执行A.py的第一行,发现sys.module里面没有<module B>,所以创建一个空的<module B>,放入sys.module,生成一个dict对象
  2. 导入B.py,填充<module B>
  3. 执行B.py的第一行,发现要导入<module A>, 然后再sys.module中查找<module A>
  4. 找到<module A>后,查找dict对象里的<Object C>,但是没有发现,引用错误

原因说白了就是class C还没有来得及建立,就请求C,肯定会出问题。如果想要执行正确,需要将B.py里面的 from A import C 改成 import A 就没有问题了。

这儿有一个比较直观的图片:

PyImportFlow

需要特别注意的是 Python只加载一次module,如果需要重新加载需要使用reload()。


至于我那个问题,随后再说吧。

参考: http://wiki.woodpecker.org.cn/moin/MiscItems/2008-11-25

相关文章

  • python import机制

    最近遇到这么一个问题,就是分词的jieba在我的工程里面logging的level设置无效。于是乎,我就去翻阅是不...

  • Python小知识点

    Python的两种引入机制 Python 提供了二种引入机制: 1.relative import2.absolu...

  • Python源码剖析笔记5-模块机制

    python中经常用到模块,比如import xxx,from xxx import yyy这样子,里面的机制也是...

  • python之import机制

    1. 标准 import Python 中所有加载到内存的模块都放在 sys.modules 。当 import ...

  • Python的import机制

    package 和 module 概念 module 可以是一个py文件,一个pyd文件,dll文件,一个so文件...

  • Python的import机制

    Python程序中,import 语句导入一个新的模块供当前程序使用。import 的基本语法是 import m...

  • Python中import机制

    Python语言中import的使用很简单,直接使用import module_name语句导入即可。这里我主要写...

  • 带你了解JavaScript相关的模块机制

    前言 java有类文件,Python有import机制,Ruby有require等,而Javascript 通过 ...

  • Python 语法

    Python 中的import机制要注意python 引用部分数组的时候是前开后闭区间 random.randin...

  • Python 中的import 机制

    1.为什么要把import导入模块放在程序开头使用呢? 解释器在执行语句时,遵循作用域原则。因为这和作用域有关系,...

网友评论

      本文标题:python import机制

      本文链接:https://www.haomeiwen.com/subject/kgxjhttx.html