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

How to access a variable in IPython from a program executed by %run

我有这样一个程序:

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

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

我正在使用 %运行 myprogram 命令在 ipython 中构建它时进行测试。

在 运行ning 之后,因为它需要很长时间,所以我将使用 ctrl+C 中断它并重写文件中的一些内容。

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

>type(foo) 
__main__.expensiveDataProcessClass

我永远不必在 foo 中编辑任何东西,所以如果我可以更新我的程序以首先检查这个 foo 变量的存在并继续在 IPython 中使用它,那就太好了而不是重新完成整个创建过程。

你可以先检查变量是否存在,如果不存在才赋值。示例:

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

但是,这实际上行不通(在保存 foo 作业的意义上)。如果你读过IPython的doc关于%run的魔法,它明确指出执行的程序是运行在它自己的命名空间中,只有在程序执行后它的globals 加载到 IPython 的交互式命名空间中。每次你使用 %run 它总是不会从程序的角度定义 foo