Python 3.x восстанавливает переменные из рассола

У меня в словаре в рассоле десятки переменных. Если определенные условия верны, мне нужно восстановить все эти переменные (всех разных типов) с теми же именами, что и ключи dict.

Я упростил код, чтобы указать на проблему. Например, один из ключей - 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» - это то, что печатается. Этот вопрос / ответ вроде работает, но он не перезапишет переменную, если она была определена ранее. Как мне заставить его переопределить переменную или есть лучший способ структурировать эту функциональность? Спасибо.


person weather guy    schedule 28.03.2016    source источник
comment
Почему бы просто не использовать их в словаре?   -  person jonrsharpe    schedule 28.03.2016


Ответы (1)


Вместо того, чтобы вмешиваться в globals, что является неэлегантным и нелицеприятным, вы можете просто передать переменные в качестве аргументов ключевого слова ("kwargs") в другую функцию:

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

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

Это просто, интуитивно понятно и питонично.

person shx2    schedule 28.03.2016