glare II 2023-05-11 14:22 采纳率: 92.5%
浏览 26
已结题

关于调用栈的问题,Python不是从上到下执行代码的?函数在没定义之前就调用,为什么不会出错?

关于调用栈的问题,Python不是从上到下执行代码的?函数在没定义之前就调用,为什么不会出错?

def a():
    print("a() starts")
    b()
    d()
    print("a() returns")

def b():
    print("b() starts")
    c()
    print("b()returns")

def c():
    print("c() starts")
    print("c()returns")

def d():
    print("d() starts")
    print("d()returns")

a()


向上面这样执行不会出错,但是


gundam()
def gundam:
    print("rx-78-2")

却会出错是为什么?

  • 写回答

5条回答 默认 最新

  • Leodong. 2023-05-11 14:31
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    Python在执行代码时,确实是从上到下依次执行的。但是,在函数定义时,Python解析器会将函数对象创建并加载到内存中,因此,函数定义可以在调用之前。这就是为什么在调用函数之前,可以在代码中定义函数而不会出错的原因。

    在你的例子中,函数a()在调用函数b()d()之前,会先定义函数b()d(),所以不会出现错误。而当你调用gundam()时,Python解释器发现gundam()未被定义,因此会抛出一个NameError异常。

    如果你想让gundam()函数能够成功调用,需要将函数定义放在调用语句之前,例如:

    def gundam():
        print("rx-78-2")
    
    gundam()
    

    这样就可以成功执行gundam()函数了。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月11日