zoukankan      html  css  js  c++  java
  • 第10.3节 Python导入模块能否取消导入?

    模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用“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

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

  • 相关阅读:
    sql:drop、delete、truncate的区别
    pgsql:插入数据,存在就更新,不存在就插入
    sql:多表连接查询
    克隆模式
    canvas 实现星空闪烁的效果,鼠标滑动,连接周围的点
    JS微信网页图片预览可放大缩小
    muduo_base 02 (Atomic)
    muduo_base 01 (Timestamp)
    select/poll/epoll
    socket编程(二)
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643657.html
Copyright © 2011-2022 走看看