擅长:python、mysql、java
<p>您定义的<code>inner</code>函数包含一个引用全局变量<code>i</code>的自由变量。在这样的例子中,这一点可能更清楚:</p>
<pre><code>def inner(y):
return i
i = 1
print inner(None)
i = 2
print inner(None)
</code></pre>
<p>它打印1和2</p>
<p>在您的第一个示例中,在调用<code>inner</code>时,<code>i</code>有一个值,这个值是函数,因此在调用<code>i</code>(即<code>inner</code>)时打印的值。在</p>
<p>在第二个例子中,在调用<code>inner</code>时,<code>i</code>的值是4,因此当调用<code>j</code>(即<code>inner</code>)时,会打印出这个值。在</p>
<p>一个明确的方法来表达您在这里可能想要的是使用一个部分求值的函数,正如另一个<a href="https://stackoverflow.com/a/46223829/1295678">answer</a>中建议的那样。另一种方法是使用封闭函数来创建闭包。像这样:</p>
^{pr2}$
<p>它将打印1到4,大概是你想要的。在</p>
<p>Python中有时使用的一个小技巧是使用变量的默认值作为单元格来包含值:</p>
<pre><code>results = []
for i in [1, 2, 3, 4]:
def inner(y, i = i):
return i
results.append(inner)
for i in results:
print i(None)
</code></pre>
<p>也可以打印1到4。在</p>