擅长:python、mysql、java
<blockquote>
<p>If we have nested functions in python, instead of using nonlocal inside inner function, can't we just declare the variable in the outer function? </p>
</blockquote>
<p>否。如果省略<code>nonlocal</code>,则内部函数中的赋值将创建一个新的本地副本,而忽略外部上下文中的声明</p>
<pre><code>def test1():
x = "Foo"
def test1_inner():
x = "Bar"
test1_inner()
return x
def test2():
x = "Foo"
def test2_inner():
nonlocal x
x = "Bar"
test2_inner()
return x
print(test1())
print(test2())
</code></pre>
<p>。。。发射:</p>
<pre><code>Foo
Bar
</code></pre>
<blockquote>
<p>Is it the same as static in C++? </p>
</blockquote>
<P> C++ +{{CD2>}变量实际上只是全局变量,范围较窄(即它们是跨函数调用存储的持久全局上下文)。p>
<p>Python<code>nonlocal</code>只是关于嵌套范围解析;在外部函数调用之间没有全局持久性(但是在来自同一外部函数调用的内部函数的多个调用之间)</p>