
上QQ阅读APP看书,第一时间看更新
5-4 函数调用与栈运作
计算机语言在执行函数调用时,内部其实是使用栈在运作,下列将以实例做说明。
程序实例ch5_4.py:由函数调用了解程序语言的运作。

执行结果

上述是一个简单的调用函数程序,接下来我们看这个程序如何应用栈运作。程序第14行调用welcome( )时,计算机内部会以栈方式配置一个内存空间。

当有函数调用时,计算机会将调用的函数名称与所有相关的变量存储在内存内,然后进入welcome( )函数。当执行第9行时会输出“洪锦魁 欢迎进入明志科技大学系统”。当执行第10行时调用system( ),计算机内部会以栈方式配置一个内存空间,同时堆放在前一次调用的welcome( )内存上方。

程序接着执行第6行,输出“洪锦魁 欢迎进入校友会系统”,然后system( )函数执行结束,此时程序返回welcome( )函数,同时将上方的内存移除,回到welcome( )函数。

上图有一个很重要的概念是,welcome( )函数执行一半时,工作先暂停但是内存数据仍然保留,先去执行另一个函数system( )。当system( )工作结束时,可以回到welcome( )函数先前暂停的位置继续往下执行。接着执行第11行输出“使用明志科技大学系统很棒”。然后执行第12行调用bye( )函数,这个调用没有传递变量,栈内存如下所示:

系统会将bye( )函数新增在栈上方,然后执行第3行输出“下回见!”,接着bye( )函数执行结束。此时程序返回welcome( )函数,同时将上方的内存移除,回到welcome( )函数。

从调用bye( )到返回welcome( )函数后,由于welcome( )函数也执行结束,所以整个程序就算执行结束了。