擅长:python、mysql、java
<p>我喜欢mgilson给出的答案,所以它得到了支票。对于来自Ruby世界的人来说,这只是对@contextmanager功能的一个小扩展。在</p>
<pre><code>gval = 0
from contextlib import contextmanager
@contextmanager
def quietude(level):
global gval
saved_gval = gval
gval = level
try:
yield
finally:
gval = saved_gval
def bebop(x):
with quietude(3):
print "first", x*2, "(gval =", gval, ")"
print "second", x*4, "(gval =", gval, ")"
bebop(100)
bebop("xxxx")
</code></pre>
<p>打印出来:</p>
^{2}$
<p>这表明<code>with</code>范围内的所有内容都可以访问词汇上封闭的变量,并且或多或少地表现出来自Ruby世界的人所期望的方式。在</p>
<p>好东西。在</p>