该def
s的只是创造的功能。除了解析语法并将函数绑定到这些名称之外,不执行任何代码。
if
实际执行的是第一个地方代码。如果先放置它,然后在定义它之前调用一个函数,则结果为NameError。因此,您需要在定义函数之后将其放置。
请注意,这与“悬挂”函数的PHP或JavaScript不同- 在处理所有函数定义之前,必须先处理和解析所有函数定义。在PHP和JavaScript中,按照您所说的做并在源代码中定义函数的位置低于调用它们的位置,这是完全合法的。(JS中的一个细节是,像这样定义的函数function(){}
被吊起,而像这样定义的函数var func1=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”