该
defs的只是创造的功能。除了解析语法并将函数绑定到这些名称之外,不执行任何代码。
if实际执行的是第一个地方代码。如果先放置它,然后在定义它之前调用一个函数,则结果为NameError。因此,您需要在定义函数之后将其放置。
请注意,这与“悬挂”函数的PHP或Javascript不同-
在处理所有函数定义之前,必须先处理和解析所有函数定义。在PHP和Javascript中,按照您所说的做并在源代码中定义函数的位置低于调用它们的位置,这是完全合法的。(JS中的一个细节是,像这样定义的函数
function(){}被吊起,而像这样定义的函数varfunc1=function(){};则没有被吊起。我还不知道它如何与PHP 5.3中的匿名函数一起工作)。看到,这里
cat()将正确打印,并
yip()给您一个NameError,因为解析器
yip()在您调用它时尚未达到其定义。
def cat(): print 'meowin, yo'cat()yip()def yip(): print 'barkin, yall'
meowin,yo追溯
(最近一次调用为最新):
文件“ cat.py”,第5行,位于ip
()中
NameError:未定义名称“ yip”



