广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 模块相互import
  • 536
分享到

python 模块相互import

模块pythonimport 2023-01-31 02:01:26 536人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

模块A中import B,而在模块B中import A。这时会怎么样呢?这个在python列表中由RobertChen给出了详细解释,抄录如下: [A.py] from B import D class C:pass

模块A中import B,而在模块B中import A。这时会怎么样呢?这个在python列表中由RobertChen给出了详细解释,抄录如下:
[A.py]  
from B import D  
class C:pass  

[B.py]  
from A import C  
class D:pass


为什么执行A的时候不能加载D呢?

如果将A.py改为:import B就可以了。

这是怎么回事呢?

RobertChen:这跟Python内部import的机制是有关的,具体到from B import D,Python内部会分成几个步骤:

  1. 在sys.modules中查找符号”B”
  2. 果符号B存在,则获得符号B对应的module对象<module B>。

    从<module B>的__dict__中获得符号”D”对应的对象,如果”D”不存在,则抛出异常

  3. 如果符号B不存在,则创建一个新的module对象<module B>,注意,这时,module对象的__dict__为空。

    执行B.py中的表达式,填充<module B>的__dict__ 。

    从<module B>的__dict__中获得”D”对应的对象,如果”D”不存在,则抛出异常。

所以,这个例子的执行顺序如下:

1、执行A.py中的from B import D

由于是执行的python A.py,所以在sys.modules中并没有<moduleB>存在,首先为B.py创建一个module对象(<moduleB>),注意,这时创建的这个module对象是空的,里边啥也没有,在Python内部创建了这个module对象之后,就会解析执行B.py,其目的是填充<module B>这个dict。

2、执行B.py中的from A import C

在执行B.py的过程中,会碰到这一句,首先检查sys.modules这个module缓存中是否已经存在<moduleA>了,由于这时缓存还没有缓存<moduleA>,所以类似的,Python内部会为A.py创建一个module对象(<moduleA>),然后,同样地,执行A.py中的语句。

3、再次执行A.py中的from B import D

这时,由于在第1步时,创建的<moduleB>对象已经缓存在了sys.modules中,所以直接就得到了<moduleB>,但是,注意,从整个过程来看,我们知道,这时<moduleB>还是一个空的对象,里面啥也没有,所以从这个module中获得符号”D”的操作就会抛出异常。如果这里只是importB,由于”B”这个符号在sys.modules中已经存在,所以是不会抛出异常的。

上面的解释已经由Zoom.Quiet收录在啄木鸟了,里面有图,可以参考一下:

 

 

--结束END--

本文标题: python 模块相互import

本文链接: https://www.lsjlt.com/news/187099.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 模块相互import
    模块A中import B,而在模块B中import A。这时会怎么样呢?这个在Python列表中由RobertChen给出了详细解释,抄录如下: [A.py] from B import D class C:pass ...
    99+
    2023-01-31
    模块 python import
  • python3--os模块,模块和包(import... , from..import...)
    os模块是与操作系统交互的一个接口使用前需要 import osos.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变...
    99+
    2023-01-30
    模块 os import
  • python导入模块--import--1
        python前面写的程序,后面就可以将它当成一个模块导入,取其精华舍弃不用的随意使用,最理想的情况是任何一个功能,只要写一次,以后所有人都可以任意调用,代码重用性高的可怕,而且python还可以根据需求将C,C+...
    99+
    2023-01-30
    模块 python import
  • python导入模块--import--2
    调用之前写的彩色打印,写个简单的脚本testimport.py实验下在跟之前test_import_color_print.py同级目录下创建testimport.py文件,不然导模块会有问题代码如下#!/usr/bin/python #&...
    99+
    2023-01-30
    模块 python import
  • python如何使用import模块
    这篇文章给大家分享的是有关python如何使用import模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。import模块在Python经常使用import声明,以使用其他模块...
    99+
    2022-10-19
  • 模块,import,from xxx i
    一,模块   模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别:   1,使用python编写的py文件   2,已被变异为共享或者DLL或者C++...
    99+
    2023-01-30
    模块 import xxx
  • python 模块相关知识
    1,python 文件标准开头:#!/usr/bin/env python3 #-- coding: utf-8 -- 2,import sys.,sys.args 是一个list,里面包含了命令行数据的list.3,安装Anaconda:...
    99+
    2023-01-31
    相关知识 模块 python
  • python相似模块用例
    一:threading VS Thread 众所周知,python是支持多线程的,而且是native的线程,其中threading是对Thread模块做了包装,可以更加方面的被使用,threading模块里...
    99+
    2022-06-04
    模块 python
  • 怎么在python中使用import导入模块
    这期内容当中小编将会给大家带来有关怎么在python中使用import导入模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scr...
    99+
    2023-06-14
  • Python中怎么使用Import自定义模块
    这篇文章给大家介绍Python中怎么使用Import自定义模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体步骤首先找到当前编辑器(可能会存在多个python解析器)对应的第三方库的安装路径,如果不知道具体的位置,...
    99+
    2023-06-15
  • Python中import模块导入的实现原理
    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入...
    99+
    2023-08-31
    python ai 机器学习 machine learning import 人工智能 ipython 原力计划
  • python import media模
    media模块不是系统的标准模块,要单独下载的! 本人python版本2.72 下面说一下我的下载和安装步骤: 下载:Python Imaging Library 1.1.7 for Python 2.7-->安装 下载pyg...
    99+
    2023-01-31
    python import media
  • python import模块时有错误红线的原因
    目录import模块时有错误红线的解决前情提要原因及解决办法import红线但是能运行解决方法import模块时有错误红线的解决   前情提要 概念: 在一个文件中代码越长...
    99+
    2022-11-13
  • Python import模块的缓存问题解决方案
    在使用django开发的平台中,支持用户自定义函数,但是每次用户进行修改编辑后,该模块内容已更改,然后重新导入该模块,但是Python 会认为“我已经导入了该模块,不需要再次读取该文...
    99+
    2022-11-12
  • python在不同层级目录import模块的方法
    使用python进行程序编写时,经常会使用第三方模块包。这种包我们可以通过python setup install 进行安装后,通过import XXX或from XXX import yyy 进行导入。不...
    99+
    2022-06-04
    层级 模块 目录
  • 如何在python中使用import语句调用模块
    如何在python中使用import语句调用模块?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python有哪些常用库python常用的库:1.requesut...
    99+
    2023-06-14
  • 怎么在python中使用import语句引入模块
    今天就跟大家聊聊有关怎么在python中使用import语句引入模块,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# ...
    99+
    2023-06-14
  • Python中import导入上一级目录模块及循环import问题的解决
    import上一级目录的模块 python中,import module会去sys.path搜索,sys.path是个列表,并且我们可以动态修改。 要import某个目录的module,我们sys.path...
    99+
    2022-06-04
    模块 目录 Python
  • Python数学相关模块怎么用
    本篇内容介绍了“Python数学相关模块怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、math模块math库是Python提供的内...
    99+
    2023-06-30
  • import导入模块,==和is,浅拷贝
    '''import导入模块'''import sysprint(sys.path)sys.path.append('D://ASoft/Python/PycharmProjects')import wisirtestwisirtest.wi...
    99+
    2023-01-30
    模块 import
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作