python 3.x 从pickle恢复变量

标签 python python-3.x pickle shelve

我在 pickle 的字典中有几十个变量。如果某些条件成立,我需要恢复所有这些变量(所有不同类型),其名称与字典的键相同。

我简化了代码来指出问题。例如,键之一是“ref10_data”。如果变量在函数的其他地方定义,它不会被覆盖,但我希望它被覆盖。

import _pickle as pickle
from numpy import max

def main():
  processing_path = '/data/common/PROBSEV_DATA/processing/'
  ref10_data = 0
  restore_dict = pickle.load(open(processing_path + 'cc_rt_prob_svr.out','rb'))

  for key in restore_dict:
    globals()[key] = restore_dict[key]

  print(max(ref10_data))

if __name__ == '__main__':
  main()

'0' 是打印的内容。这个question/answer有点有效,但它不会覆盖先前定义的变量。如何让它重新定义变量,或者是否有更好的方法来构造此功能? 谢谢。

最佳答案

您可以简单地将变量作为关键字参数(“kwargs”)传递给另一个函数,而不是篡改全局变量(这既不优雅也不Pythonic):

def foo(ref10_data, another_var, yet_another_var):
    print(max(ref10_data))

def main():
    ...
    restore_dict = pickle.load(...)
    foo(**restore_dict)

这很简单、直观并且具有 Python 风格。

关于python 3.x 从pickle恢复变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270473/

相关文章:

Python代码优化

python - 如何将 'pickle'一个对象到某个目录?

Python编码函数无法解码

python - 在 python 中保存和加载类

python - Odoo扩展与继承

python - 使用现有压缩 header 压缩文本字符串

python - CountVectorizer token 模式

python - 通过文本行搜索的正确方法,re.findall() 和 re.search() 都不能完全工作

Python Pygame 窗口没有响应

python-3.x - Cloud 9 CS50 上的 pylint 错误消息