我有一个这样的程序:
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中使用它而不是在整个创建过程中使用它会很酷试。
答案 0 :(得分:1)
您可以先检查变量是否存在,只有在它不存在时才分配给它。例如:
if __name__=="__main__":
if not "foo" in globals()
foo = expensiveDataProcessClass(filepath)
然而,这实际上不起作用(在保存foo
作业的意义上)。如果您在%run
魔术上阅读了IPython的doc,它会明确指出执行的程序在其自己的命名空间中运行,并且只有在程序执行后,其globals
才会加载到IPython的交互式命名空间中。每次使用%run
时,它都不会从程序的预期中定义foo
。