清除 Canopy 环境中的变量

Clear variables in Canopy environment

我可以在 Python 文件中使用命令来清除所有变量吗?

我已经搜索了一段时间,但我能找到的只是使用 %reset。但是,这似乎只在 IPython 中有效,但当我尝试 运行 一个 python 文件时无效。

仅供参考,我正在使用免费版的 enthought canopy。

[从评论中添加:]我有几个 python 文件 运行,它们可能有共享变量。我希望能够在 运行 任何文件之前清除所有变量,以保证我已经正确定义了变量并且它们采用了正确的值。

tl;dr -- 你所描述的不是问题。

但还是值得理解,避免其他方面的混淆:

1) 当您 运行 宁 IPython(包括 Canopy 的 Python 窗格,这是一个标准的 IPython QtConsole)时,IPython 有它的自己的全局命名空间(变量、模块和函数等的列表)不同于其中 运行 的脚本的命名空间。这可能令人困惑,但它实际上是一个功能。

2) 当您正常 运行 每个脚本时,它以一个空的名称空间开始,就好像它是 运行 普通 Python 中的一样。这就是为什么您的担忧不是问题。但这也会让初学者感到困惑,因为您的脚本也不知道 IPython 中已经导入的模块。有关更多信息,请参阅 this article.

3) 当脚本完成时,它的全局命名空间被复制到 IPython 全局命名空间(覆盖任何已经存在的同名变量)。

4) 因此,正常的可见性是单向的——IPython 看到您 运行 脚本的结果,因此您可以在提示符下更多地使用它们,但您的脚本不会看不到您以前的脚本的结果 运行(甚至不是同一个脚本),或者您在提示符下执行的任何操作的结果。

5) 但是,与 运行 纯 Python 脚本相比,有一个巨大的不同。也就是说,IPython 本身不会在 运行 之间重新初始化(除非你重置内核),特别是,任何已经导入的模块仍然被初始化并且不会被重新加载或当您在后续脚本中导入它们时重新初始化。有关详细信息,请参阅 this article

6) 旁注:可以为 %运行 命令提供一个 -i 选项来使命名空间可见性为双向,因此您的脚本将从 IPython 命名空间开始(正如我认为您所期望的那样),但这是不寻常的,而不是默认的,因为通常人们想要确保(正如您显然所做的那样)脚本是 运行ning "clean"。使用此选项的主要原因是让您的脚本相互构建,但有更健壮、可移植的方法来实现此目的(即将 IPython 命名空间中的变量名作为参数传递给您定义的函数在你的脚本中)。