脚本执行后保留命名空间和变量值

时间:2016-11-11 20:29:45

标签: python python-2.7

我在Matlab中编写了一些代码,其中脚本中执行的变量范围保留在“工作空间”中。我正在处理的数据非常大,因此每次执行脚本需要20-30分钟才能产生必要的结果。 Matlab的优点是在执行之后,如果我想在脚本末尾添加代码,我可以将它执行到结果变量,而不是必须从头开始重新运行代码。

如何在Python中执行类似的操作,从一个脚本执行到下一个脚本执行保留变量的值?

3 个答案:

答案 0 :(得分:1)

您可以在执行结束时将变量写入磁盘上的某些持久存储,例如使用shelvejson模块。然后在脚本的开头添加一些逻辑,尝试从持久存储中读取变量并恢复工作空间,并在负载失败时重新运行计算。

答案 1 :(得分:1)

你真的想要运行一个交互式python shell。这就是你在MATLAB中所做的,所有脚本都在同一个MATLAB shell中运行。这就是变量在运行中持续存在的原因,因为shell正在保留它们。

与python的不同之处在于它有两种运行脚本的方法:在python shell或standalone中。你在python中独立运行它们,这不是MATLAB中的一个选项。

如果你想要在MATLAB中尽可能接近你所做的事情,只需将脚本中的代码包装在一个函数中,启动一个python shell,然后运行该函数。

然而,对于长时间运行的重复代码而言,这通常不是最佳方法,就像您正在做的那样。更好的方法是使用IPython / Jupyter笔记本。此界面允许您有选择地运行部分代码,重新组织部件以及许多其他有用的功能。它还具有一项功能,允许您跨会话自动保留特定变量。

答案 2 :(得分:0)

如果我理解正确的话。

我认为最好的选择是直接使用python shell而无需在文件中编写脚本然后运行它。

第二选择是酸洗或对象序列化:

  

“Pickling”是Python对象层次结构的过程   转换为字节流,“unpickling”是反向的   操作,从而将字节流转换回对象   层次结构。

"Python object serialization"