変数が定義されている環境を調べると、変数の名前を見つけることができます。ここでは、このアイデアを探求する 2 つの関数を用意しています。
変数名を見つけ、名前を変数にマッピングするディクショナリを作成し、最終的に変数とその名前を含むディクショナリをピクルするために、環境をピクル関数に渡す必要があります。
locals()
unpickling 関数は、ファイルから unpickle された変数を渡して環境 (通常は ) を更新します。
import pickle
def pickle_vars(fileName, env, *vs):
d = dict([(x, env[x]) for v in vs for x in env if v is env[x]])
with open(fileName, 'wb') as f:
pickle.dump(d, f)
def unpickle_vars(fileName, env):
with open(fileName, 'rb') as f:
d = pickle.load(f)
env.update(d)
def f():
x = 10
y = 20
pickle_vars('vars', locals(), x, y)
f()
unpickle_vars('vars', globals())
print x,y
これは、拡張子 の変数として名前が付けられた、個別のファイル内の各変数をピクルするように変更された関数です.p
。
def pickle_vars(fileName, env, *vs):
d = [(x, env[x]) for v in vs for x in env if v is env[x]]
for name, var in d:
with open(name + '.p', 'wb') as f:
pickle.dump(var, f)