You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何单个Python脚本中存在两个main函数仍可正常执行?

Python重复定义函数的执行逻辑解析

核心原理:函数定义是“覆盖式”的,脚本逐行执行

Python是解释型语言,代码从上到下逐行执行,函数本质是存放在全局命名空间里的对象——当你重复定义同名函数时,后定义的函数会直接覆盖之前的同名函数引用。

结合你的代码,我们一步步拆解执行流程:

  1. 先定义第一个main()和foo():此时全局变量main指向第一个main函数(内部调用foo()),foo指向打印this is foo 1.的函数。
  2. 执行第一个if __name__ == '__main__':条件成立,调用当前的main(),它内部调用的是还没被覆盖的第一个foo(),所以输出this is foo 1.。
  3. 继续向下执行,定义第二个main():这会把全局的main引用替换成新的函数(同样内部调用foo());接着定义第二个foo(),把全局的foo引用替换成打印this is foo 2.的函数。
  4. 执行第二个if __name__ == '__main__':条件依然成立,调用此时的main()(也就是第二个定义的),它内部调用的是已经被覆盖后的第二个foo(),所以输出this is foo 2.。

针对你的疑问的具体解答:

  • Python如何确定执行哪个foo函数?:调用foo()时,Python会去全局命名空间找当前最新的foo引用——哪个函数最后被定义,就用哪个。第一次调用时第二个foo还没定义,所以用第一个;第二次调用时第一个foo已经被覆盖,所以用第二个。
  • 为何不会重复执行同一个foo函数?:因为两次调用foo()的时机不同,第一次调用发生在第二个foo定义之前,第二次发生在之后,两次调用时foo指向的是不同的函数对象,自然不会执行同一个。

内容的提问来源于stack exchange,提问作者code_smoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:24:25