前言

在上篇讲述Python函数的整体以及两种方式的调用,本篇博文是对函数调用进行一个细致的解析即函数是怎么被调用执行的。

Python程序执行

Python学习至今,我们应该对Python的执行有所了解,Python是解释性语言,所以在执行过程中便是按照代码顺序一条条读取执行;
函数执行:
函数头在执行过程中被读取时,解释器会将函数头以及函数体存储在内存中,此时的函数内容并不会被执行,只有当解释器读取到调用函数的语句时才会执行函数,此时程序的控制权便转移到了函数,开始执行函数体内容当函数体内容执行完之后程序控制权便回到调用者。
注意:Python中函数是被读取到内存之后等待调用执行,所以函数可以定义在程序文件的任意位置。

调用栈

在执行程序过程中便涉及内存的存储与调用,而函数的调用便是内存的堆栈处理。
每次调用函数时,系统会创建一个为函数存储它的参数和变量的激活记录,然后将激活记录存放在一个被称为堆栈的内存区域。
调用栈也可称为执行堆栈、运行堆栈或机器堆栈,简称为堆栈。
当一个函数调用另一个函数时,调用者的激活记录不会改变,然后会为新函数的调用创建一个新的激活记录,当函数调用执行结束之后程序控制转移回到调用者,同时该函数在堆栈中的激活记录会被删除。
堆栈采用的先进后出的存取方式进行存储激活记录,即最后被调用的函数的激活记录是最先被删除的,理解堆栈有利于理解函数的调用。
当函数被调用时,一个新的激活记录会被创建用于存储相应变量和参数(注意:Python中所有数据均是对象,变量指向对象即数据 ),当堆中的对象不再需要时,Python会自动清空对象。
例如:在max函数中,v1和v2分别指向对象o1和o2(大),result即最大值最终指向较大的对象即o2,最终返回o2,而当执行结束不再需要时这些对象便从栈中被删除。

小结

今天主要是对函数调用的解析和补充,了解一个函数是如何调用的,在程序编写中会对程序执行更加了解和有把握。