我经常编写只能作为main运行的命令行实用程序。例如,我可能有一个如下所示的文件:
#!/usr/bin/env python
if __name__ == '__main__':
import sys
# do stuff
换句话说,在if语句检查此文件作为main运行时,没有任何事情发生。我尝试导入这样的文件,看看会发生什么,导入成功。
正如我所料,允许一个人导入这样的文件,但这种做法的惯例是什么?是否应该抛出错误告诉用户没有要导入的内容?或者如果文件的所有内容都应该作为main运行,是否需要检查程序是否作为main运行?或者条件没有必要吗?
另外,如果我有import语句,它们应该在文件的顶部,还是在条件下?如果模块仅在条件下使用,那么在我看来它们应该在条件下导入,而不是在文件的顶部。
答案 0 :(得分:4)
如果您正在编写简单的实用程序,而您完全确定永远不会将其作为模块导入到另一个程序中,那么您实际上不需要包含if __name__ == '__main__'
内容。该构造的基本点是允许开发一个模块,既可以作为模块导入使用,也可以作为独立程序运行以用于其他目的。例如,如果您有一个模块并且有一些测试向量要定期运行,那么您可以将测试向量的触发机制放在if __name__
块中。
另一个例子可能是你开发了一个独立的程序,也可以为其他程序提供有用的功能。如果您看一下pip模块,这是这种技术的一个很好的例子。