【问题标题】:Why do some python scripts declare main() in this manner? [duplicate]为什么有些 python 脚本以这种方式声明 main()? [复制]
【发布时间】:2016-10-12 08:35:57
【问题描述】:

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

def main():
    #run code

if __name__ == "__main__":
    main()  

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

【问题讨论】:

  • 当我在网上搜索时,this was the first resultThis was the second。请先尝试自己研究问题,然后再在这里提问。
  • @juanpa.arrivillaga。我做了谷歌,但我无法理解我读到的内容。感谢 SO 社区,刚刚出现在这个问题上的直接答案更容易理解。
  • 这已经在 SO 上回答了。如果您知道它们是重复的,请不要发布重复的问题。

标签: python main


【解决方案1】:

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

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

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

【讨论】:

  • 听起来这行只有对要导入的代码才需要。对吗?
  • @user91579631 是的,尽管根据我的个人经验,将代码设计为模块化和导入友好总是好的,即使可能看起来像丢弃脚本(例如绘制一些数字、解析一些日志等) .) 可能在更大范围内有用
  • 谢谢。似乎总是使用if __name__ == "__main__": 是个好习惯
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 2021-09-28
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多