IPython是否不更新使用%run运行的代码中定义的变量?

IPython是否不更新使用%run运行的代码中定义的变量?,python,ipython,canopy,Python,Ipython,Canopy,我一直在试图弄清楚IPython是如何与代码%run中定义的变量交互的。我对%run的理解是,它运行给定的python文件,然后将其所有数据导入当前IPython笔记本的名称空间。然而,我遇到了以下问题,我不确定如何解释 假设我们有一个名为“foo.py”的简单程序 如果我们运行“foo.py”并向IPython询问foo的值,我们会得到以下结果 In [1]: %run "foo.py" In [2]: foo Out[2]: 5 In[3]: changeVar()

我一直在试图弄清楚IPython是如何与代码%run中定义的变量交互的。我对%run的理解是,它运行给定的python文件,然后将其所有数据导入当前IPython笔记本的名称空间。然而,我遇到了以下问题,我不确定如何解释

假设我们有一个名为“foo.py”的简单程序

如果我们运行“foo.py”并向IPython询问
foo
的值,我们会得到以下结果

In [1]: %run "foo.py"

In [2]: foo
Out[2]: 5
In[3]: changeVar()


In[4]: foo
Out[4]: 5
如果我们运行
changeVar()
,然后再次向IPython询问
foo
的值,我希望IPython返回
6
,但事实上,我们得到了以下结果

In [1]: %run "foo.py"

In [2]: foo
Out[2]: 5
In[3]: changeVar()


In[4]: foo
Out[4]: 5
然而,当我们运行
printVar()
时,我们得到了一个结果

In[5]: printVar()
6
这是怎么回事?从表面上看,我们似乎陷入了矛盾。我一直在想,这是否是一个类似于变量范围的问题。局部变量可以与全局变量具有相同的名称,但具有不同的值,因此这里是否发生了类似的情况?如果这是真的,那么当运行
changeVal()
时,IPython似乎不会更新它的
foo
版本

我在Enthow Corporation中运行Python 2.7.13


无论如何,希望我只是错过了一些简单的东西。谢谢

是的,Ipython有自己的名称空间。尝试使用
%run-i
选项。有关详细信息,请键入
%run?
。此外,本文可能会有所帮助:

顺便说一句,树冠已经到了生命的尽头。请参阅本文。但你关于%run的问题适用于任何环境中的iypthon run。