<p>因此,每当在方法/函数内部定义变量时,就不能从该方法外部访问其值</p>
<p>这就是为什么当您试图访问<code>start</code>行中的<code>total = end - start</code>时,Python解释器不知道什么是<code>start</code></p>
<p>有几种方法可以解决这个问题</p>
<ol>
<li>将开始变量和结束变量移到方法外部(这些变量现在称为全局变量,而不是特定于方法的变量):</li>
</ol>
<pre class="lang-py prettyprint-override"><code>start = None
end = None
# Defining these variables outside the methods
# will allow you to access them from inside any method
def temp(x, y):
start = time.time()
wn.onscreenclick(temp2)
wn.onscreenclick(temp)
def temp2(x, y):
end = time.time()
total = end - start
print (total)
wn.mainloop()
</code></pre>
<ol start=“2”>
<li>使用python类和对象为变量创建更具体的名称空间(这有点高级,但有助于保持代码更干净)</li>
</ol>
<pre class="lang-py prettyprint-override"><code>class Timer:
def __init__():
self.start = None
self.end = None
def temp(self, x, y):
self.start = time.time()
wn.onscreenclick(self.temp2)
def temp2(self, x, y):
self.end = time.time()
print (self.end - self.start)
timer = Timer()
wn.onscreenclick(timer.temp)
</code></pre>
<ol start=“3”>
<li>将值作为参数传递给方法</li>
</ol>
<pre class="lang-py prettyprint-override"><code>start = None
end = None
# Defining these variables outside the methods
# will allow you to access them from inside any method
def temp(x, y):
start = time.time()
return start
def temp2(x, y, start):
end = time.time()
total = end - start
print (total)
start = temp(x, y)
temp2(x, y, start)
</code></pre>
<p>这对于您的代码和用例来说并不是微不足道的,但这是可能的。@quamrana给出了一个如何实现的示例</p>