Canopy IPython 没有用 %运行 更新代码 运行 中定义的变量?
Canopy IPython not updating variables defined in code ran with %run?
我一直在努力弄清楚 IPython 是如何与代码 运行 和 %运行 中定义的变量交互的。我对 %运行 的理解是,它 运行 是一个给定的 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 到 return 6
,但实际上,我们得到了下面的
In[3]: changeVar()
In[4]: foo
Out[4]: 5
然而,当我们 运行 printVar()
我们得到。
In[5]: printVar()
6
那么这是怎么回事?从表面上看,我们似乎达成了矛盾。我一直在想这是否是一个类似于变量范围的问题。局部变量可以与全局变量同名但具有不同的值,所以这里发生了类似的事情吗?如果这是真的,当 changeVal()
是 运行.
时,IPython 似乎不会更新它的 foo
版本
我在 Enthought Canopy 运行宁 Python 2.7.13
无论如何,希望我在这里只是遗漏了一些简单的东西。谢谢!
是的,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
我一直在努力弄清楚 IPython 是如何与代码 运行 和 %运行 中定义的变量交互的。我对 %运行 的理解是,它 运行 是一个给定的 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 到 return 6
,但实际上,我们得到了下面的
In[3]: changeVar()
In[4]: foo
Out[4]: 5
然而,当我们 运行 printVar()
我们得到。
In[5]: printVar()
6
那么这是怎么回事?从表面上看,我们似乎达成了矛盾。我一直在想这是否是一个类似于变量范围的问题。局部变量可以与全局变量同名但具有不同的值,所以这里发生了类似的事情吗?如果这是真的,当 changeVal()
是 运行.
foo
版本
我在 Enthought Canopy 运行宁 Python 2.7.13
无论如何,希望我在这里只是遗漏了一些简单的东西。谢谢!
是的,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