我在 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/