chapter4.3、函数执行流程

函数执行流程

def foo1(b,b1=3):
    print("foo1 called",b,b1)
    
def foo2(c):
    foo3(c)
    print("foo2 called",c)
    
def foo3(d):
    print("foo3 called",d)
    
def main():
    print("main called")
    foo1(100,101)
    foo2(300)
    print("main ending")
main()

对于以上函数,执行流程为

1、在全局帧中生成foo1,foo2,foo3,main函数对象

2、调用main函数

3、main函数查找print函数压栈,,将常量main called字符串常量压栈,调用print函数,弹出常量,执行后打印与栈无关

4、main 函数在全局中查找函数foo1,将函数压栈,再将参数常量100,101压栈,调用函数foo1,创建栈帧。print函数压栈,字符串和变量压栈,调用函数print,弹出栈顶的数据,返回值。

5、main函数继续执行,全局查找foo2,将foo2压栈,再将常量压栈,调用foo2,创建栈帧。foo3压栈,变量c引用压栈,调用foo3,创建栈帧,foo3调用print函数,然后返回。foo2继续调用,print压栈,常量压栈,弹出执行。foo2执行完,main函数弹出foo2。

6、main函数继续执行,将print执行,弹出print函数,main函数返回。

 

栈和线程相关,调用同一个函数,不同的线程同时运行互不干涉

 

posted on 2018-08-29 22:52  Riper  阅读(138)  评论(0编辑  收藏  举报

导航