擅长:python、mysql、java
<P>考虑如下:</P>
<pre class="lang-py prettyprint-override"><code>def main():
def buildFunction():
def fun():
return myNumber
return fun
myNumber = 3 # can use this...
myFun = buildFunction()
myNumber = 3 # ... or this
print(myFun()) # prints 3 this time
</code></pre>
<p>这与lambda示例更具可比性,因为闭包函数嵌套在声明感兴趣变量的范围内。您的示例有两个不同的作用域,因此有两个完全不相关的<code>myNumbers</code></p>
<p>如果您没有遇到<code>nonlocal</code>关键字,您能猜出这将打印什么吗</p>
<pre class="lang-py prettyprint-override"><code>def main():
def buildFunction():
nonlocal myNumber
myNumber = 6
def fun():
return myNumber
return fun
myNumber = 3
myFun = buildFunction()
# myNumber = 3
print(myFun())
</code></pre>