【问题标题】:Canopy IPython not updating variables defined in code ran with %run?Canopy IPython 不更新使用 %run 运行的代码中定义的变量?
【发布时间】:2020-10-09 23:12:20
【问题描述】:

我一直试图弄清楚 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

那么这里发生了什么?从表面上看,我们似乎遇到了矛盾。我一直想知道这是否是类似于变量范围的问题。局部变量可以与全局变量同名但具有不同的值,那么这里发生了类似的事情吗?如果这是真的,那么运行changeVal() 时,IPython 似乎不会更新它的foo 版本。

我在 Enthought Canopy 中运行 Python 2.7.13

无论如何,希望我只是在这里遗漏了一些简单的东西。谢谢!

【问题讨论】:

    标签: python ipython canopy


    【解决方案1】:

    是的,Ipython 有自己的命名空间。尝试使用%run -i 选项。有关此内容的更多信息,请键入 %run?。此外,这篇文章可能会有所帮助: https://support.enthought.com/hc/en-us/articles/204469630-Modules-are-already-available-in-Canopy-s-Python-PyLab-prompt-but-not-in-a-script

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2017-06-19
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多