代码之家  ›  专栏  ›  技术社区  ›  snakile

如何清除Python脚本中间的所有变量?

  •  61
  • snakile  · 技术社区  · 14 年前

    我在寻找类似于Matlab中“clear”的东西:一个命令/函数,它从工作区中删除所有变量,从系统内存中释放它们。Python中有这样的东西吗?

    8 回复  |  直到 5 年前
        1
  •  72
  •   Alex Martelli    14 年前

    每一个 当前模块的名称:

    >>> import sys
    >>> sys.modules[__name__].__dict__.clear()
    

    物体 姓名 ,绑定到对象;序列所做的是从模块中删除每个名称(当且仅当对它们的每个引用都被删除时,相应的对象才会消失)。

    也许你想更具选择性,但除非你想更具体一些,否则很难准确地猜出你的意思。但是,举个例子:

    >>> import sys
    >>> this = sys.modules[__name__]
    >>> for n in dir():
    ...   if n[0]!='_': delattr(this, n)
    ... 
    >>>
    

    __builtins__ 包含所有内置名称的特殊名称。所以,内置程序仍然有效——例如:

    >>> dir()
    ['__builtins__', '__doc__', '__name__', '__package__', 'n']
    >>> 
    

    n for )也会碰巧停留在附近(因为它在 对于 子句),因此最好将该控制变量命名为 _ _ 在提示符处输入的每个完整表达式之后,都会重新绑定到该表达式的值,这样它不会停留太久;-).

    不管怎样,一旦你确定了它到底是什么 如果您想这样做,那么定义一个函数并将其放入启动文件(如果您只希望在交互式会话中使用)或站点自定义文件(如果您希望在每个脚本中使用)并不困难。

        2
  •  64
  •   Leponzo    5 年前

    IPython %reset 通常有效的命令

        3
  •  29
  •   Post169    7 年前

    如果你写了一个函数,那么一旦你把它留在里面所有的名字都消失了。

    namespace 太棒了,它进入了 Zen of Python

    名称空间是一个非常好的主意 --让我们做更多的这些!

    IPython的名称空间同样可以用magic命令重置 %reset -f . (The) -f 意思是“force”;换句话说,“不要问我是否真的要删除所有变量,就这样做吧。”)

        4
  •  10
  •   Suraj Rao Raas Masood    7 年前
    from IPython import get_ipython;   
    get_ipython().magic('reset -sf')
    
        5
  •  5
  •   Jug    11 年前

    __saved_context__ = {}
    
    def saveContext():
        import sys
        __saved_context__.update(sys.modules[__name__].__dict__)
    
    def restoreContext():
        import sys
        names = sys.modules[__name__].__dict__.keys()
        for n in names:
            if n not in __saved_context__:
                del sys.modules[__name__].__dict__[n]
    
    saveContext()
    
    hello = 'hi there'
    print hello             # prints "hi there" on stdout
    
    restoreContext()
    
    print hello             # throws an exception
    

    您还可以在调用saveContext()之前添加一行“clear=restoreContext”,clear()的工作方式与matlab的clear类似。

        6
  •  3
  •   tardis    6 年前

    在Spyder中,可以为每个Python文件配置IPython控制台,以便在每次执行菜单之前清除所有变量 Run -> Configuration -> General settings -> Remove all variables before execution .

        7
  •  2
  •   Kolay.Ne Raj Chinna    5 年前

    这个 globals() id (这些对象的名称) exec() 函数接受一个字符串并执行它,就好像您只是在python控制台中键入它一样。所以,代码是

    for i in list(globals().keys()):
        if(i[0] != '_'):
            exec('del {}'.format(i))
    
        8
  •  0
  •   Harold Henson    6 年前

    在空闲IDE中有Shell/restartshell。Cntrl-F6就可以了。

        9
  •  0
  •   Ivan    5 年前

    创建包含所有必需变量的类不是最简单的方法吗? 然后你有一个对象包含所有curretn变量,如果你需要你可以覆盖这个变量吗?