模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用“del 模块名”进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删除后在调用时找不到模块了,但并没有真正删除整个导入模块。为什么这么说呢?这是因为删除后与删除前Python系统内相关的处理不同:

1、 首次导入会执行导入的模块文件,而导入后删除模块在此导入不会执行模块文件;

2、 使用《第10.2节 查看导入的Python模块》介绍的方法还是可以查看到模块名。

请看如下案例:

>>> import importtest
Now in importtest module!
>>> importtest.ftest()
execute ftest function....
>>> del importtest
>>> importtest.ftest()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
importtest.ftest()
NameError: name 'importtest' is not defined
>>> import importtest #删除后倒入没有执行模块文件
>>> importtest.ftest()
execute ftest function....
>>> import sys
>>> for m in sys.modules:
if str(sys.modules[m]).find(r'(built-in)')==-1 and str(sys.modules[m]).find(r'C:\\Program Files\\Python37')==-1 :print('模块名:',m,', 模块来源: ',sys.modules[m])

执行结果如下:

模块名: _frozen_importlib , 模块来源:  <module 'importlib._bootstrap' (frozen)>
模块名: _frozen_importlib_external , 模块来源: <module 'importlib._bootstrap_external' (frozen)>
模块名: importlib._bootstrap , 模块来源: <module 'importlib._bootstrap' (frozen)>
模块名: importlib._bootstrap_external , 模块来源: <module 'importlib._bootstrap_external' (frozen)>
模块名: pyexpat.errors , 模块来源: <module 'pyexpat.errors'>
模块名: pyexpat.model , 模块来源: <module 'pyexpat.model'>
模块名: xml.parsers.expat.model , 模块来源: <module 'pyexpat.model'>
模块名: xml.parsers.expat.errors , 模块来源: <module 'pyexpat.errors'>
模块名: importtest , 模块来源: <module 'importtest' from 'c:\\pythonsrc\\importtest.py'>
>>>

执行截图:

本节简单介绍了是的能对导入模块进行逆向反导入,可以看到导入的模块可以删除但并不能真正反导入。每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

第10.3节 Python导入模块能否取消导入?的更多相关文章

  1. 第10.1节 Python的模块及模块导入

    一. 什么是模块 Python中的模块即单个的Python代码文件,为什么称为模块呢?这是因为在Python中,每个独立的Python文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间 ...

  2. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  3. 第10.6节 Python包的概念

    一. 引言 在<第10.2节 Python的模块及模块导入>介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要 ...

  4. 第10.9节 Python子包的导入方式介绍

    在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...

  5. 第10.8节 Python包的导入方式详解

    一. 包导入与模块导入的关系 由于包本质上是模块,其实对模块的许多导入方法都适用于包,但由于包的结构与模块有差异,所以二者还是有些区别的: 对包的导入,实际上就是包目录下的__init__.py文件的 ...

  6. Python之模块和包导入

    Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...

  7. 第10.4节 Python模块的弱封装机制

    一. 引言 Python模块可以为调用者提供模块内成员的访问和调用,但某些情况下, 因为某些成员可能有特殊访问规则等原因,并不适合将模块内所有成员都提供给调用者访问,此时模块可以类似类的封装机制类似的 ...

  8. 第10.11节 Python模块和包小结

    Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...

  9. python常用模块 以及第三方导入

    python常用模块 1模块的分类 标准模块(内置模块)( 标准库 )300 第三方模块 18万 pip install 直接通过pip安装 软件一般会被自动安装你python安装目录的这个子目录里 ...

随机推荐

  1. mac下docker安装php链接使用国产数据库驱动

    docker下配置php macos系统无法使用神通数据库,所以使用docker来安装php 第一步先安装php docker search php docker pull php:7.1-fpm d ...

  2. 数据采集与融合第四次作业:多线程以及scrapy框架的使用

    数据采集第四次作业:多线程以及scrapy框架的使用 任务一:单多线程的使用 单线程代码: from bs4 import BeautifulSoup from bs4 import UnicodeD ...

  3. InnoDB事务的二阶段提交

    问题: 什么是二阶段提交 为什么需要二阶段提交 二阶段提交流程 什么是二阶段提交? ### 假设原来id 为10 的记录age 为5 begin; update student set age = 1 ...

  4. 这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

    前言 如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock.栅栏 ...

  5. rbd无法map(rbd feature disable)

    在jewel版本下默认开启了rbd的一些属性 [root@lab8106 ~]# ceph --show-config|grep rbd|grep features rbd_default_featu ...

  6. 丢了ceph.mon.keying解决办法

    在linux操作系统下,可能因为一些很小的误操作,都会造成非常重要的文件的丢失,而文件的备份并不是每时每刻都会注意到,一般是等到文件丢失了才会去想办法,这里讲下ceph.mon.keyring丢失的解 ...

  7. Java POI导入word, 带图片

    1.导入文件示例,word中简历表格模板 2.代码示例分两部分,一部分读取图片 /** * 导入word(基本信息,word格式) * @param staffId * @param baseInfo ...

  8. Gulp自动化构建的基本使用

    Study Notes 本博主会持续更新各种前端的技术,如果各位道友喜欢,可以关注.收藏.点赞下本博主的文章. Gulp 用自动化构建工具增强你的工作流程! gulp 将开发流程中让人痛苦或耗时的任务 ...

  9. Hadoop框架:MapReduce基本原理和入门案例

    本文源码:GitHub·点这里 || GitEE·点这里 一.MapReduce概述 1.基本概念 Hadoop核心组件之一:分布式计算的方案MapReduce,是一种编程模型,用于大规模数据集的并行 ...

  10. 仿射密码-fanfie--affine

    仿射密码 仿射密码 是一种专情密码,一对一替换 ~~ 加密函数是 e(x) = ax + b (mod m) 其中a和m 互质,m是字母的数目. 解码函数是 d(x) = a^-1(x - b) (m ...