यदि आप चाहते हैं कि आप उपयोग किए जा सकने वाले कार्य को स्वीकृत उत्तर दें:
import shelve
def save_workspace(filename, names_of_spaces_to_save, dict_of_values_to_save):
'''
filename = location to save workspace.
names_of_spaces_to_save = use dir() from parent to save all variables in previous scope.
-dir() = return the list of names in the current local scope
dict_of_values_to_save = use globals() or locals() to save all variables.
-globals() = Return a dictionary representing the current global symbol table.
This is always the dictionary of the current module (inside a function or method,
this is the module where it is defined, not the module from which it is called).
-locals() = Update and return a dictionary representing the current local symbol table.
Free variables are returned by locals() when it is called in function blocks, but not in class blocks.
Example of globals and dir():
>>> x = 3 #note variable value and name bellow
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'x': 3, '__doc__': None, '__package__': None}
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']
'''
print 'save_workspace'
print 'C_hat_bests' in names_of_spaces_to_save
print dict_of_values_to_save
my_shelf = shelve.open(filename,'n')
for key in names_of_spaces_to_save:
try:
my_shelf[key] = dict_of_values_to_save[key]
except TypeError:
pass
my_shelf.close()
def load_workspace(filename, parent_globals):
'''
filename = location to load workspace.
parent_globals use globals() to load the workspace saved in filename to current scope.
'''
my_shelf = shelve.open(filename)
for key in my_shelf:
parent_globals[key]=my_shelf[key]
my_shelf.close()
an example script of using this:
import my_pkg as mp
x = 3
mp.save_workspace('a', dir(), globals())
कार्यक्षेत्र प्राप्त / लोड करने के लिए:
import my_pkg as mp
x=1
mp.load_workspace('a', globals())
print x
जब मैंने इसे चलाया तो यह काम किया। मैं मानता हूँ कि मुझे समझ में नहीं आता है dir()
और globals()
100% है तो मुझे यकीन नहीं है कि अगर कुछ अजीब कैविटी हो सकती है, लेकिन अभी तक यह काम कर रहा है। टिप्पणियाँ स्वागत है :)
कुछ और शोध के बाद अगर आप फोन करते हैं save_workspace
जैसा कि मैंने save_workspace
ग्लोबल्स के साथ सुझाव दिया है और एक फ़ंक्शन के भीतर है तो यह अपेक्षित रूप से काम नहीं करेगा यदि आप स्थानीय दायरे में वेरिएबल्स को बचाना चाहते हैं। उस उपयोग के लिए locals()
। ऐसा इसलिए होता है क्योंकि ग्लोबल्स ग्लोबल्स को उस मॉड्यूल से लेते हैं जहां फ़ंक्शन को परिभाषित किया जाता है, न कि जहां से इसे बुलाया जाता है, मेरा अनुमान होगा।