【问题标题】:Python program startPython程序启动
【发布时间】:2010-09-22 04:19:08
【问题描述】:

我应该用以下方式启动 Python 程序:

if__name__ == '__main__':
some code...

如果是这样,为什么?看过很多次了,就是不知道。

【问题讨论】:

  • @Kirill Titov:请不要将问题编辑为“已关闭”。它没有关闭。你选择了一个答案——那是完美的,你需要做的所有事情。做得更多会令人困惑。

标签: python


【解决方案1】:

如果您的程序可用作库,但您也有一个主程序(例如,用于测试库),则该构造允许其他人将该文件作为库导入而不运行您的主程序。如果您的程序名为 foo.py,并且您从另一个 python 文件“导入 foo”,__name__ 的计算结果为 'foo',但如果您从命令行运行“python foo.py”,__name__ 的计算结果为 @ 987654324@.

请注意,您确实需要在 if 和 _ 之间插入一个空格,并缩进主程序:

if __name__ == '__main__':
    main program here

【讨论】:

  • +1:重用很重要。一个模块可以有 2 条生命。作为主程序。作为其他一些主程序中的组件。由于主程序是做事。作为组件,它只是定义事物。
  • 这可能不言而喻,但请确保此条件位于文件末尾。
【解决方案2】:

这是一个很好的做法。首先,它清楚地标记了您的模块入口点(假设您在顶层没有任何其他可执行代码 - 呸)。其次,它使您的模块无需执行即可被其他模块导入,这是一些工具(如代码检查器、打包器等)需要做的。

【讨论】:

    【解决方案3】:

    更好的模式是这样的:

    def main():
       ...
    
    if __name__ == '__main__':
       main()
    

    这允许您的代码被导入它的人调用,同时也使pycheckerpylint 等程序工作。

    【讨论】:

    • 谢谢!我担心整个程序必须从一开始就缩进。我不喜欢那样。
    【解决方案4】:

    Guido Van Rossum suggests:

    def main(argv=None):
      if argv is None:
        argv = sys.argv
      ...
    
    if __name__ == "__main__":
        sys.exit(main())
    

    这样你可以从其他地方运行main()(提供参数),如果你想从main()退出并返回错误代码return 1,它不会使交互式解释器退出错误。

    【讨论】:

    • 也许确保示例具有文本中概述的返回值?
    • 所有函数都有一个隐式返回值 None,它转换为退出代码 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多