擅长:python、mysql、java
<p>如果与字典本身的大小相比,对字典的修改数量相对较小,则可以通过创建<a href="https://docs.python.org/2/library/contextlib.html?highlight=contextmanager#contextlib.contextmanager" rel="nofollow">context manager</a>函数并按如下所示使用它来避免每次都复制它。这将确保对字典所做的任何更改都是临时的,即使在块内使用时引发了异常。在</p>
<pre><code>from contextlib import contextmanager
@contextmanager
def contextdict(adict, **kwargs):
# modify dictionary
changed = {}
added = []
for key in kwargs:
if key in adict:
changed[key] = adict[key]
else:
added.append(key)
adict[key] = kwargs[key]
yield adict
# restore dictionary
adict.update(changed)
for key in added:
del adict[key]
e = dict(...) # some dictionary
with contextdict(e, table="users", timestamp=time.time()) as context:
queue.push(context)
with contextdict(e, table="events") as context:
queue.push(context)
# e will be unchanged at this point
</code></pre>