python - 导入Python主程序的约定

标签 python

我经常编写仅作为主程序运行的命令行实用程序。例如,我可能有一个如下所示的文件:

#!/usr/bin/env python

if __name__ == '__main__':
    import sys
    # do stuff

换句话说,没有任何事情发生在 if 语句下,检查这个文件是否作为主文件运行。我尝试导入这样的文件,看看会发生什么,导入成功。

因此,正如我所料,允许像这样导入文件,但围绕这种做法的惯例是什么?是否应该抛出一个错误告诉用户没有任何东西可以导入?或者如果文件的所有内容都应该作为 main 运行,是否需要检查程序是否作为 main 运行?还是不需要条件?

此外,如果我有 import 语句,它们应该放在文件的顶部,还是在条件下?如果模块仅在条件下使用,在我看来,它们应该在条件下而不是在文件顶部导入。

最佳答案

如果你正在编写简单的实用程序,你完全确定你永远不会在另一个程序中作为模块导入,那么你真的不需要包含 if __name__ == '__main__' 东西.该构造的基本点是允许开发一个模块,既可以作为模块导入使用,也可以作为独立程序运行用于其他目的。例如,如果您有一个模块并且有一些您希望定期在其上运行的测试向量,您可以将测试向量的触发机制放在 if __name__ block 中。

另一个例子可能是,如果您有一个自己开发的独立程序,它也可以为其他人提供有用的功能。如果您查看 pip 模块,就会发现这是该技术的一个很好的例子。

关于python - 导入Python主程序的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37015756/

相关文章:

python - Lomb-Scargle 与 FFT 功率谱 : crashes with evenly spaced data

python - 如何处理书籍交叉数据集中的 0 个条目

python - 如何在python中从不规则格式的数据文件中提取数据

python - 如何实时改变音量

python - 如何在数组上使用 multiprocessing.Pool?

python - 如何从文本文件导入包含字典的数组?

python - 如何在Kivy Python中设置GridLayout的某些按钮的高度?

python - 使用 Loop 根据数据中的条件修改 Pandas Dataframe

python - 有没有一种有效的方法可以在 python 的多处理中共享只读稀疏矩阵

python - 用于集成测试的斜纹布替代品