栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何取消导入Python模块?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何取消导入Python模块?

我认为这篇文章应该对您有帮助

编辑:为了确保此信息的可用性(如果链接消失或类似原因),我将在此处包括来自教师邮件列表的原始消息:


Dick Moores在2006年8月14日写道:

实际上,我的问题是,在使用IDLE进行模块的一些导入和变量的初始化之后,如何将其返回到其初始状态而不关闭并重新打开它。

因此,例如,在我完成之后

>>> import math, psyco>>> a = 4**23

我如何清除这些而不关闭IDLE?(我曾经知道如何,但是我已经忘记了。)

嗨,迪克,

通常,这需要从“模块注册表”中删除并在代码中删除对其的引用。如果您有一个使用 得很
好的模块(例如将配置参数导入到每个模块中的模块),那么您将有一个额外的步骤将其从同样,如果您使用了“ from psyco import
…”,那么您将无法轻松释放该模块以及对该模块的引用(是从该模块导入,还是从第三个模块导入?请参阅“如果偏执狂:下面的代码)。

下面的函数从Python解释器中按名称删除模块,“
paranoid”参数是要从其他所有模块中删除的变量名的列表(假定已与该模块一起删除)。对偏执的参数要非常小心;如果您的函数和类在不同的模块中被命名为相同的名称,则可能会对解释器造成问题。一种常见的情况是例外情况下的“错误”。许多库在模块中都有一个称为“错误”的“包罗万象”异常。如果您也将异常命名为“错误”并决定将其包括在偏执狂列表中,那么……还有很多其他异常对象。

def delete_module(modname, paranoid=None):    from sys import modules    try:        thismod = modules[modname]    except KeyError:        raise ValueError(modname)    these_symbols = dir(thismod)    if paranoid:        try: paranoid[:]  # sequence support        except: raise ValueError('must supply a finite list for paranoid')        else: these_symbols = paranoid[:]    del modules[modname]    for mod in modules.values():        try: delattr(mod, modname)        except AttributeError: pass        if paranoid: for symbol in these_symbols:     if symbol[:2] == '__':  # ignore special symbols         continue     try:         delattr(mod, symbol)     except AttributeError:         pass

然后,您应该可以像这样使用它:

delete_module('psyco')

要么

delete_module('psyco', ['Psycho', 'KillerError'])# only delete these symbols from every other module# (for "from psyco import Psycho, KillerError" statements)

-弓箭



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号