수락 된 답변이 작동하도록 추상화하려면 다음을 사용할 수 있습니다.
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
하고 함수 내에 있으면 좀 더 조사한 후 로컬 범위에 veriables를 저장하려는 경우 예상대로 작동하지 않습니다. 그 사용을 위해 locals()
. 이것은 globals가 함수가 정의 된 모듈에서 전역을 취하기 때문에 발생합니다.