擅长:python、mysql、java
<p>实际上,这是一个运行时错误,因为Python将在运行时尝试解析<code>flt</code>名称(因为它是一种动态语言),但找不到它。当这种情况发生时,Python会产生异常,说它找不到您正在使用的符号<code>flt</code>,而所有这些都在运行时发生。</p>
<p>当解释器发现一些与Python语法不符的东西时,就会出现语法错误。例如:Python的语法无法将输入语法识别为有效的Python程序。这可能发生在:</p>
<ol>
<li>您忘记在<code>if, def, class</code>等表达式的末尾添加<code>:</code></li>
<li>你忘了把一些括号或括号等合上</li>
<li>当你不遵守python的语法时,还有很多地方:)</li>
</ol>
<p>在你的例子中,语法没有错。对于解释器来说,<code>flt(i)</code>是对<code>flt</code>方法的非常有效的调用,如果该方法确实存在,则必须在运行时在作用域内进行检查。所以解释器不会抱怨,你的问题的语法也很好。</p>
实际上,这可以被看作是<> E>编译语言<EEM > C语言、C++等的缺点。这种错误可以在编译时更快地检测到,编译器在发现时大声尖叫,这样你就可以注意到它。</p>
<p>对于动态语言,在调用实际方法之前不会注意到这一点。你的程序很简单,所以你可能会发现它很快。但是,<code>float</code>中缺少的<code>o</code>在某个类的子类中的某个遗留框架中,作为属性,在其他模块中,等等,这会很苛刻:)</p>
<p><strong>更新:</strong><a href="http://docs.python.org/2/reference/executionmodel.html" rel="noreferrer">The execution model</a>在Python的文档中,如果您了解Python内部是如何工作的,那么这是一本很好的读物。这将进一步澄清您的疑问,并为您提供大量的知识:)</p>
<p>希望这有帮助!</p>