【问题标题】:Retaining namespace and variable values after script execution脚本执行后保留命名空间和变量值
【发布时间】:2016-11-11 20:29:45
【问题描述】:

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

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

【问题讨论】:

  • 我已经改写了您的问题和标题,以更好地表达我认为您的意思。如果我误解了什么,请随时回滚。

标签: python python-2.7


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      如果我理解正确的话。

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

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

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

      "Python object serialization"

      【讨论】:

      • 当然可以,但如果计算复杂到需要 20-30 分钟,我认为不太实用。
      • 我认为这取决于代码的格式和可视化,而不是运行时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多