擅长:python、mysql、java
<p>在python中,变量有两种类型:局部变量和全局变量。局部变量只能从函数内部看到(每次调用函数时它们都是不同的),而全局变量可以从任何地方看到(并且是持久的)。你知道吗</p>
<p>还有可能有一个全局和局部变量具有相同的名称。如果函数中有一个局部变量,那么名称所指的就是局部变量。你知道吗</p>
<p>为了确定函数中的变量是局部变量还是全局变量,必须检查它的使用方式。基本上假设它是本地的,除非:</p>
<ul>
<li>它使用<code>global</code>语句声明为全局的</li>
<li>它没有被分配到。你知道吗</li>
</ul>
<p>在第一次尝试中,您将<code>stuff</code>和<code>stuff2</code>分配在<code>megaf</code>的开头,因此它被认为是局部的(因为您没有声明它是全局的)。因此,您不能在<code>megaf</code>之外访问它们。你知道吗</p>
<p>在您尝试通过将<code>stuff</code>和<code>stuff2</code>分配给<code>megaf</code>之外的<code>megaf</code>来解决这个问题时,您仍然将<code>stuff</code>和<code>stuff2</code>本地分配给<code>megaf</code>。<code>stuff</code>和<code>stuff2</code>的用法指的是局部变量,但是在使用它们之前您还没有将它们赋值给局部变量(注意,<code>stuff</code>和<code>stuff2</code>的外部赋值是全局变量,这是不同的)。你知道吗</p>
<p>有两个解决办法。首先,肮脏的一点是简单地声明它们是全局的:</p>
<pre><code>def function():
ciao = stuff + stuff2
return ciao
def megaf():
global stuff, stuff2
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function()
</code></pre>
<p>这是肮脏的,因为使用全局变量通常被认为是糟糕的做法。另一种解决方案是将它们作为参数传递给<code>function</code>,如其他答案中所述。你知道吗</p>