如何从%run执行的程序访问IPython中的变量

时间:2015-02-27 23:03:28

标签: python ipython

我有一个这样的程序:

if __name__=="__main__":
  foo = expensiveDataProcessClass(filepath)

  y = foo.doStuff()
  y = foo.doOtherStuff()

我正在使用%run myprogram命令在ipython中构建它。

在它运行之后,因为它需要永远,我将用ctrl + C打破它并重写文件中的一些东西。

即使在我打破它之后,IPython也存储了foo。

>type(foo) 
__main__.expensiveDataProcessClass

我永远不需要在foo中编辑任何东西,所以如果我可以更新我的程序以首先检查这个foo变量是否存在并且继续在IPython中使用它而不是在整个创建过程中使用它会很酷试。

1 个答案:

答案 0 :(得分:1)

您可以先检查变量是否存在,只有在它不存在时才分配给它。例如:

if __name__=="__main__":
    if not "foo" in globals()
        foo = expensiveDataProcessClass(filepath)

然而,这实际上不起作用(在保存foo作业的意义上)。如果您在%run魔术上阅读了IPython的doc,它会明确指出执行的程序在其自己的命名空间中运行,并且只有在程序执行后,其globals才会加载到IPython的交互式命名空间中。每次使用%run时,它都不会从程序的预期中定义foo