python允许在函数定义前就“调用”它,但这里的调用指的不是真正意义上的运行函数对应的内容,具体例子如下所示。
def a():
b()
def b():
print("This is b")
a()
这种形式的函数定义,在C语言中是会报错的,因为b函数并没有在a函数前定义,也没有函数原型声明。而在python中,解释器发现a函数的定义时并不会去检查其内部的其他函数调用或变量赋值是否合法,而只是记录下有函数a,等到运行a()语句时,才会去执行a函数,此时b函数已经被解释器读取,因此不会报错。
对于变量,依旧适用,解释器发现a函数的定义时,并不会检查print语句中的c是否定义,而是在c定义完成,执行a语句时才来检查是否有c。
def a():
print(c)
c=5
a()
所以,一种比较保险的方法是,把主程序段写在最后,从而可以不管前面所定义函数的相互依赖性问题。