擅长:python、mysql、java
<p><code>raise_to_exp</code>是由<code>raise_to</code>定义的参数<code>exp</code>上的<em>闭包</em>。调用<code>raise_to(2)</code>时,返回一个函数,在该函数体中,变量<code>exp</code>引用了定义<code>raise_to_exp</code>的作用域中的变量</p>
<p>这意味着<code>square</code>是一个函数,其中<code>exp</code>绑定到2,因此大致相当于定义</p>
<pre><code>def square(x):
return pow(x, 2)
</code></pre>
<hr/>
<p>为了证明没有用值2替换<code>exp</code>的<em>,您可以深入<code>function</code>对象来<em>更改<code>exp</code>的值</p>
<pre><code>>>> square(5)
25
>>> square.__closure__[0].cell_contents = 3 # now square is cube!
>>> square(5)
125
</code></pre>