Canopy IPython 未更新使用 %run 运行的代码中定义的变量?

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


假设我们有以下名为“foo.py”的简单程序。


foo = 5


def printVar():

    print foo

    

def changeVar():

    global foo

    foo = foo + 1

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


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


In [2]: foo

Out[2]: 5

如果我们运行changeVar()然后再次询问 IPython 的值,foo我希望 IPython 返回6,但实际上,我们得到以下结果。


In[3]: changeVar()



In[4]: foo

Out[4]: 5

然而,当我们跑步时,printVar()我们得到了。


In[5]: printVar()

6

那么这是怎么回事呢?从表面上看,我们似乎陷入了矛盾。我一直想知道这是否是一个类似于变量作用域的问题。局部变量可以与全局变量具有相同的名称,但具有不同的值,那么这里是否发生了类似的情况?如果这是真的,那么 IPython 似乎不会更新它运行foo时的版本。changeVal()


我正在 Enthought Canopy 中运行 Python 2.7.13


不管怎样,希望我在这里错过了一些简单的东西。谢谢!


一只名叫tom的猫
浏览 110回答 1
1回答

守着一只汪

是的,Ipython 有自己的命名空间。尝试使用该%run -i选项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python