解决Python函数声明先后顺序出现的问题
在 Python 中如果把函数定义写在调⽤的下⽅可能会出错,例如下⾯的代码
foo()
def foo():
print("hello")
执⾏时会报出错误
NameError: name 'foo' is not defined
这时候要把 foo() 调⽤代码放到该函数的声明后⾯
def foo():
print("hello")
foo()
这样执⾏就⼀切正常了。这仿佛像是 C 语⾔中的函数调⽤需要提前声明⼀般,例如在 C 语⾔中要调⽤后头的定义的函数要写成
void foo();
int main() {
foo();
}
void foo() {
printf("Hello");
}
实际上 Python 中并不存在函数提前声明⼀说,也不能像 Java 那样函数可以写在任意位置,因为 Java 是编译型的语
⾔,Python 是解释型的。
⽽且也不是⼀定要求被调⽤的函数⼀定要在源代码层⾯上定义在调⽤者前⽅。
Python 中函数声明的顺序据我理解有两条规则
Python 源代码是由上往下解释的
printf函数的用法python
到程序⼊⼝(未包含在函数中的代码) 即开始执⾏,执⾏到的函数未被先⾏解释到即报错
分析下⾯两段代码
def foo():
bar()
if __name__ == '__main__':
foo()
def bar():
print("hello")
Python 从第 1 ⾏⼀直解释到第 4 ⾏的⼊⼝,进⽽往回跳,调⽤到第 1 ⾏的 foo() 函数,⽽其中的 bar() 函数还未及被解释到,所以会提⽰
NameError: name 'bar' is not define
解释到第⼆⾏ bar() 的时候,Global frame ⾥只有 foo, bar 还不存在
如果把程序⼊⼝往后调
def foo():
bar()
def bar():
print("hello")
if __name__ == '__main__':
foo()
上⾯代码执⾏⽆误,输出
hello
foo() 调⽤的 bar() 不也是在它下⽅声明的吗?所以这⼀点与 C 是有区别的。
解释到第 8 ⾏的时候在 Global frame 中 foo, bar 都有了,所以能成功调⽤。
这时候的理解是这样的,Python 从第 1 ⾏⾃上往下解释到第 7 ⾏的程序⼊⼝时,foo() 并未实际调⽤ bar(),但 foo() 和 bar()函数都已解释到了,所以回过头来 foo() 与 bar() 之间怎么调⽤都⽆妨。
因此,最好的实践⽅法就是把程序的⼊⼝放到代码的最下⽅,那么它前⾯的函数不管如何的声明顺序都没有关系。
以上就是解决Python 函数声明先后顺序的问题的详细内容,更多关于python 函数声明顺序的资料请关注其它相关⽂章!