Python执行顺序疑问:if __name__ == '__main__'用法及输出异常问题
问题解答
1. 为什么要把if __name__ == '__main__':放在代码末尾?
Python是从上到下逐行执行代码的,这个语句的作用是只有当脚本被直接运行时才执行里面的代码(如果被当作模块import到其他脚本里,这部分不会执行)。把它放在末尾有几个关键原因:
- 确保前面所有的函数、类、变量都已经被定义完成,执行
main()的时候不会出现“未定义”的报错——毕竟你总不能调用一个还没被Python读到的函数吧? - 代码结构更清晰:前面全是可复用的定义(函数、类、常量),最后才是程序的启动逻辑,别人看代码的时候一眼就能找到入口在哪。
- 符合Python社区的约定俗成:先加载所有基础定义,再执行一次性的启动操作,是大家默认的合理写法。
2. 为什么代码会同时输出"Hello!"和"Hi!"?
你写的print("Hello!")是在全局作用域里的,不属于任何函数或者if __name__ == '__main__':块。Python执行脚本时,会先从头到尾执行所有全局代码,不管你有没有那个if判断。具体执行流程是:
- 先执行全局的
print("Hello!"),输出"Hello!" - 定义
main()函数(这一步只是把函数的逻辑存起来,不会执行里面的代码) - 检查
__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
相关产品推荐
相关产品推荐

