擅长:python、mysql、java
<p>内部的<code>def setter(n)</code>函数定义了它自己的局部变量<code>x</code>。这将隐藏另一个<code>x</code>变量,该变量是<code>make_adder_and_setter</code>的参数(在作用域中形成一个洞)。因此<code>setter</code>函数没有副作用。它只设置内部局部变量的值并退出。在</p>
<p>如果您尝试下面的代码,可能会对您很清楚。它做的完全一样,只是用了z的名字而不是x</p>
<pre><code>def make_adder_and_setter(x):
def setter(n):
z = n
return (lambda y: x + y, setter)
myadder, mysetter = make_adder_and_setter(5)
print myadder(10)
mysetter(7)
print myadder(10)
</code></pre>