函数执行流程
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函数返回。
栈和线程相关,调用同一个函数,不同的线程同时运行互不干涉