擅长:python、mysql、java
<p>深入研究ruby的收益率,您似乎想要类似<a href="http://docs.python.org/2/library/contextlib.html#contextlib.contextmanager">^{<cd1>}</a>:</p>
<pre><code>from contextlib import contextmanager
def razz_the_jazz():
print gval
@contextmanager
def quietude(level):
global gval
saved_gval = gval
gval = level
try:
yield
finally:
gval = saved_gval
gval = 1
with quietude(3):
razz_the_jazz()
razz_the_jazz()
</code></pre>
<p>此脚本输出:</p>
^{2}$
<p>指示我们的上下文管理器在全局命名空间中重置了<code>gval</code>。当然,我不会使用这个上下文管理器,因为它只在全局名称空间中工作。(它不能在函数中使用局部变量)例如。在</p>
<p>这基本上是对赋值如何创建对对象的新引用的限制,而且您永远不能通过直接赋值来改变对象。(改变一个对象的唯一方法是分配给它的一个属性或通过<code>__setitem__</code>(<code>a[x] = whatever</code>))来实现</p>