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

时间:2016-10-12 08:35:58

标签: python main

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

def main():
    #run code

if __name__ == "__main__":
    main()  

在其他python脚本中,行if __name__ == "__main__":不存在但代码正常运行。为什么在代码可以正常运行时有这个额外的冗余线呢?使用if __name__ == "__main__":的优势是什么?

2 个答案:

答案 0 :(得分:3)

此行允许您仅在将脚本作为主脚本运行时(例如python my_script.py)默认运行某些功能。

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

如果您从未在其他代码或python shell中导入此脚本,那么您就不需要这一行。但是,将代码设计为模块化和组合是一件好事。进口友好;甚至可能看起来像丢弃脚本(例如绘制一些数字,解析一些日志等)在更大的上下文中可能是有用的。特别是在交互式shell会话中,例如使用ipython。成本很小:在函数中封装语句并添加ifmain

答案 1 :(得分:1)

当您创建模块时,这很有用,或者如果您打算在运行其他脚本时导入您的scipt,这将非常有用。 __name__ == "__main__"仅在该脚本是执行的 main 脚本时才为真,因此当它在import语句中运行时,它可以避免运行后续代码。