如何从 %运行 执行的程序访问 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
。
我有这样一个程序:
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
。