在Canopy环境中清除变量

时间:2015-07-02 16:14:12

标签: python ipython enthought

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

但值得理解,避免其他混淆点:

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

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

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

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

5)但是,从普通Python运行脚本时,存在一个巨大的差异。也就是说,IPython本身不会在运行之间重新初始化(除非您重置内核),特别是,任何已导入的模块仍然已初始化,并且在后续导入时不会重新加载或重新初始化脚本。有关详细信息,请参阅this article

6)旁注:%run命令可以被赋予-i选项以使命名空间可见性为双向,因此您的脚本将从IPython命名空间开始(我认为您期望),但是这是不寻常的而不是默认值,因为通常人们希望确保(正如你显然那样)脚本正在运行“干净”。使用此选项的主要原因是让您的脚本相互构建,但是有更强大,可移植的方法来实现这一点(即将IPython命名空间中的变量名称作为参数传递给您在脚本中定义的函数)