为什么某些 python 脚本以这种方式声明 main()?

Why do some python scripts declare main() in this manner?

在某些 python 脚本中,我看到了这种格式;

def main():
    #run code

if __name__ == "__main__":
    main()  

在其他 python 脚本中,行 if __name__ == "__main__": 不存在,但代码 运行s 正常。即使没有它,代码也可以正常 运行 为什么要有这个额外的冗余行?使用if __name__ == "__main__":有什么好处?

默认情况下,只有当您 运行 脚本作为主脚本时(例如 python my_script.py),此行允许您实现某些功能 运行。

当脚本可以用作主程序或导入另一个 python 模块或 python shell 时,这很有用。在后一种情况下,您几乎肯定不希望 main(或其他模块功能)在导入时 运行,这是解释器加载脚本时默认发生的情况。

如果您永远不会在其他代码或 python shell 中导入此脚本,那么您不需要这一行。但是,最好将代码设计为模块化和导入友好的;即使是看起来像是丢弃的脚本(例如绘制一些数字、解析一些日志等)在更大的上下文中也可能有用。特别是在交互式 shell 会话中,例如使用 ipython。而且代价小:将语句封装在函数中,加上ifmain

这在您制作模块时很有用,或者通常如果您打算在 运行 其他脚本时导入您的 scipt。 __name__ == "__main__" 仅当该脚本是执行的 main 脚本时才为真,因此它避免了 运行 在导入时 运行 的后续代码声明。