Python程序启动

时间:2008-11-13 15:16:35

标签: python

我应该用:

启动Python程序
if__name__ == '__main__':
some code...

如果是这样,为什么?我多次看到它,但对它没有任何线索。

4 个答案:

答案 0 :(得分:29)

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

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

'__main__'

答案 1 :(得分:23)

更好的模式是:

def main():
   ...

if __name__ == '__main__':
   main()

这允许导入代码的人调用您的代码,同时还可以使pycheckerpylint等程序正常工作。

答案 2 :(得分:20)

Guido Van Rossum suggests

def main(argv=None):
  if argv is None:
    argv = sys.argv
  ...

if __name__ == "__main__":
    sys.exit(main())

这样你可以从其他地方运行main()(提供参数),如果你想从return 1只用main()退出错误代码,它就不会错误地让互动翻译出口。

答案 3 :(得分:3)

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