擅长:python、mysql、java
<p>{{cd2>所引用的对象{cd1>没有改变^的问题。在</p>
<p>相反,您需要告诉对象要更改,并且只能对可变对象执行此操作;字符串不是可变的。一个列表可以,但我认为一个类可能更清楚一些:</p>
<pre><code>from contextlib import contextmanager
class Node(object):
def __init__(self,value):
self.value=value
def update(self, newvalue):
self.value = newvalue
def __str__(self):
return str(self.value)
@contextmanager
def call(begin, end, *args, **kwargs):
begin(*args, **kwargs)
try:
yield
finally:
end(*args, **kwargs)
def lockFunc(*args):
print 'in lockFunc'
print 'lock %s' %args[0]
def unlockFunc(*args):
print 'in unlockFunc'
print 'unlock %s' %args[0]
node = Node('old-node')
with call(lockFunc, unlockFunc, node):
print 'in with'
# update node value here
node.update('new-node')
</code></pre>
<p>产生</p>
^{pr2}$
<p>(Ubuntu 14.04,Python 2.7.6)</p>