假设我有一些创建多个变量的代码:
# Some code
# Beginning of the block to memoize
a = foo()
b = bar()
...
c =
# End of the block to memoize
# ... some more code
我想记住上面的整个 block ,而不必明确说明 block 中创建/更改的每个变量或手动腌制它们。我如何在 Python 中执行此操作?
理想情况下,我希望能够用一些东西(if/else
或 with
语句)包装它,并有一个标志,如果我想强制刷新。
从概念上来说,它会像:
# Some code
# Flag that I can set from outside to save or force a reset of the chache
refresh_cache = True
if refresh_cache == False
load_cache_of_block()
else:
# Beginning of the block to memoize
a = foo()
b = bar()
...
c = stuff()
# End of the block to memoize
save_cache_of_block()
# ... some more code
有没有什么方法可以做到这一点而不必显式地 pickle 代码中定义或更改的每个变量? (即在第一次运行结束时我们保存,稍后我们只重用这些值)
最佳答案
如何使用 locals()
获取局部变量列表,将它们存储在 pickle 中的字典中,然后使用(下面更具概念性):
for k,v in vars_from_pickle:
run_string = '%s=%s' % (k,v)
exec(run_string)
恢复您的本地堆栈。也许最好使用列表而不是字典来保留堆栈顺序。
关于python - 在 Python 中内存整个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414200/