【问题标题】:python 3.x restore variables from picklepython 3.x 从泡菜中恢复变量
【发布时间】:2016-07-16 04:37:00
【问题描述】:

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

我简化了代码以指出问题所在。例如,其中一个键是“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 可以工作,但如果它是先前定义的,它不会覆盖变量。我如何让它重新定义一个变量,或者有更好的方法来构建这个功能? 谢谢。

【问题讨论】:

  • 为什么不在字典中使用它们?

标签: python python-3.x pickle shelve


【解决方案1】:

您可以简单地将变量作为关键字参数 ("kwargs") 传递给另一个函数,而不是篡改不雅且不合 Python 的 globals

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

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

这很简单,直观,Pythonic。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多