擅长:python、mysql、java
<p>@Martijn Pieters的精彩解释。由于<strong>yield</strong>在您的案例中是多余的,您可以通过创建自己的上下文管理器(不使用<strong>yield</strong>和<strong>contextlib.contextmanager</strong>)。这更简单易读。所以在您的例子中,您可以实现如下内容。在</p>
<pre><code>import time
class time_print(object):
def __init__(self, task_name):
self.task_name = task_name
def __enter__(self):
self.t = time.time()
def __exit__(self):
print self.task_name, "took", time.time() - self.t, "seconds."
def doproc():
x=1+1
with time_print("processes"):
# __enter__ is called
[doproc() for _ in range(500)]
# __exit__ is called
</code></pre>
<p>内部<strong>contextlib.contextmanager</strong>按照@Martijun Pieters的解释,调用<strong>\uuenter\</strong>和<strong>\uuu exit\uuu</strong>魔术函数。希望这有帮助!在</p>