本帖最后由 Brick_Porter 于 2022-10-23 20:21 编辑
你的疑问值得深入思考哦。
python的解释器在执行你编写的代码时会从上往下逐行执行代码,表面上看函数m的定于语句确实出现在了main函数之后,但是真正调用main函数的语句出现在了m函数的定义之后,换言之当解释器执行main()这行代码的时候,它已经把函数m的定义读入内存了,解释器知道main函数内部的m是什么,所以此时不会报错。
来看看例子,第一个示例:def main():
m() # 调用函数m
def m():
print('hi')
main() # 调用main函数,此时不出错
第二个示例:def main():
m() # 调用函数m
main() # 立即调用函数main,必然报错
def m():
print('hi')
总结来说,如果解释器在执行代码的时候已经了解了函数、类、变量等的定义,那么即使前后文顺序是乱的也没关系,反之则必然报错。
当然,程序的执行方式不止解释执行这一种,另一种执行方式就是类似C语言那种先编译,然后执行编译后的文件。此时上下文乱序就真的没关系了,因为编译器不是逐行执行代码,而是一次性读取全部代码,分析它们的逻辑关系,然后才编译成可执行文件。由于编译器替你分析了前后文关系,所以即使乱序也没关系。只是执行Python代码多用解释器,极少用编译器罢了。 |