python程序启动

Python program start

我应该用以下命令启动python程序吗?

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

如果是,为什么?我看过很多次,但一点都不知道。


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

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

1
2
if __name__ == '__main__':
    main program here


更好的模式是:

1
2
3
4
5
def main():
   ...

if __name__ == '__main__':
   main()

这允许导入代码的人调用您的代码,同时也可以使程序,如a href="http://pychecker.sourceforge.net/"rel="noreferrer">pychecker/a a和a href="http://www.logilab.org/projects/pylint"rel="noreferrer">pylint/a a工作。


Guido van Rossum建议:

1
2
3
4
5
6
7
def main(argv=None):
  if argv is None:
    argv = sys.argv
  ...

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

通过这种方式,您可以从其他地方运行main()(提供参数),如果您想退出时使用错误代码,则只需从main()中退出return 1,并且不会使交互式解释器错误退出。


这是很好的做法。首先,它清楚地标记了您的模块入口点(假设您在顶层没有任何其他可执行代码——yuck)。第二,它使您的模块可以由其他模块导入而不执行,这是一些工具(如代码检查程序、包装程序等)需要做的。