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

Python执行顺序疑问:if __name__ == '__main__'用法及输出异常问题

问题解答

1. 为什么要把if __name__ == '__main__':放在代码末尾?

Python是从上到下逐行执行代码的,这个语句的作用是只有当脚本被直接运行时才执行里面的代码(如果被当作模块import到其他脚本里,这部分不会执行)。把它放在末尾有几个关键原因:

  • 确保前面所有的函数、类、变量都已经被定义完成,执行main()的时候不会出现“未定义”的报错——毕竟你总不能调用一个还没被Python读到的函数吧?
  • 代码结构更清晰:前面全是可复用的定义(函数、类、常量),最后才是程序的启动逻辑,别人看代码的时候一眼就能找到入口在哪。
  • 符合Python社区的约定俗成:先加载所有基础定义,再执行一次性的启动操作,是大家默认的合理写法。

2. 为什么代码会同时输出"Hello!"和"Hi!"?

你写的print("Hello!")是在全局作用域里的,不属于任何函数或者if __name__ == '__main__':块。Python执行脚本时,会先从头到尾执行所有全局代码,不管你有没有那个if判断。具体执行流程是:

  1. 先执行全局的print("Hello!"),输出"Hello!"
  2. 定义main()函数(这一步只是把函数的逻辑存起来,不会执行里面的代码)
  3. 检查__name__是否为__main__(因为你直接运行脚本,结果是肯定的),所以执行main(),输出"Hi!"

如果只想输出"Hi!",把print("Hello!")移到main()函数里面,或者放到if __name__ == '__main__':块里就行。修改后的示例代码:

# Just code...

def main():
    print("Hi!")


if __name__ == "__main__":
    # 把Hello!移到这里,只有直接运行脚本才会输出
    print("Hello!")
    main()

或者:

# Just code...

def main():
    print("Hello!")
    print("Hi!")


if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:12:43