我认为这篇文章应该对您有帮助
编辑:为了确保此信息的可用性(如果链接消失或类似原因),我将在此处包括来自教师邮件列表的原始消息:
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)
-弓箭
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)