chapter4.3、函数执行流程

博客介绍了函数执行流程,先在全局帧生成函数对象,调用main函数,main函数在执行中查找并调用其他函数,涉及压栈、弹栈操作。还提到栈和线程相关,不同线程同时运行同一函数互不干涉。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数执行流程

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函数返回。

 

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

 

转载于:https://www.cnblogs.com/rprp789/p/9531920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值