Python函数定义顺序问题怎么解决?调用前必须定义吗
作者:独孤尚良dugushangliang
还在为Python函数调用顺序头疼吗?本文用简单例子讲清为什么函数必须先定义后调用,以及函数间互相调用为何不受顺序限制,了解Python执行机制,避开NameError常见坑,让你的代码更顺畅
Python函数定义顺序问题
踩过多少次坑后
意识到这个问题得好好琢磨琢磨,所以现在记录下想明白了的其中的情况。
python是不需要先编译的,所以这决定了你调用函数之前得知道有这个函数,所以执行代码前需要有要用到的函数的定义。
def a():
print("hello!")
print("hey")
a()上面这个代码执行的时候,首先是知道有一个函数a(),但不看这个函数里面的内容,继续执行下面的代码,当执行过print("hey")后要执行a()时,调用之前记录下的函数a(),如果a()的定义放在后面,则程序不知道有这个函数,则会报错。
那么为什么函数之间互相调用不需要先后顺序呢?
def a():
b()
def b():
print("hello!")
print("hey")
a()上面的代码为什么可以正确执行呢?看我刚刚说的话。
程序执行的时候,读取到函数的定义的时候,这是记录下函数的名单,知道有这么些函数,但是不看函数里面的内容,当需要执行函数的时候才去读取这个函数里面的内容。
上面的代码在执行的时候,程序先见了a()的定义,又见了b()的定义,再执行a()的时候,直接去找程序见过的函数了。如果调用函数的时候程序还没见过这个函数,是不能成功运行的。
可以看下面的代码验证这个想法。
第一个代码验证
print("hey")
a()
def a():
b()
def b():
print("hello!")报错如下图所示。

这是因为执行到a()的时候程序还没见过这个函数的定义。
第二个代码验证
def a():
b()
print("hey")
a()
def b():
print("hello!")报错如下图所示。

执行a()的时候程序见过了a()的定义,所以可以调用a(),但a()中调用的b()还没见过,所以报错。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
