Nếu bạn muốn câu trả lời được chấp nhận được tóm tắt để hoạt động, bạn có thể sử dụng:
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') # 'n' for new
for key in names_of_spaces_to_save:
try:
my_shelf[key] = dict_of_values_to_save[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
#print('ERROR shelving: {0}'.format(key))
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())
để lấy / tải không gian làm việc:
import my_pkg as mp
x=1
mp.load_workspace('a', globals())
print x #print 3 for me
nó hoạt động khi tôi chạy nó. Tôi sẽ thừa nhận rằng tôi không hiểu dir()
và globals()
100% vì vậy tôi không chắc liệu có thể có một số cảnh báo kỳ lạ hay không, nhưng cho đến nay nó có vẻ hoạt động. Bình luận được chào đón :)
sau một số nghiên cứu thêm nếu bạn gọi save_workspace
như tôi đã đề xuất với toàn cầu và save_workspace
nằm trong một hàm, nó sẽ không hoạt động như mong đợi nếu bạn muốn lưu các có thể xác minh trong phạm vi cục bộ. Để sử dụng đó locals()
. Điều này xảy ra bởi vì các khối cầu lấy các khối cầu từ mô-đun nơi hàm được xác định, chứ không phải từ nơi nó được gọi là suy đoán của tôi.