python学习日记之if __name__ == "__main__"的使用场景和含义
1. if __name__ == "__main__"的用处
在python开发过程中,经常会看到程序员通过会在每一个py即模块的最后面写上 if __name__ == "__main__", 并在这个语句下面进行函数功能的调试或者验证,常见的模式主要通过如下的方式,即先定义一个main函数,在main函数下编写需要调试的功能或函数逻辑,然后在 if __name__ == "__main__"语句下面运行main函数。如下图所示
那么这里为什么一定要写main函数并在if __name__ == "__main__"语句下面实现功能逻辑的调试?而不是直接调试就行了吗?其实是由于在python的项目开发过程中,通过不同模块间需要导入,被调用的底层函数往往不需要在底层的模块中运行,只需要在最上层运行即可,但是在编写底层的时候又需要事先调试一下自己写的功能到底能不能用,如果直接调用调试,调试完还需要删除掉,避免影响上层调用时候再次运行,但是一旦下次有新的代码更新,又要写调试代码,来来回回非常麻烦,所以需要在if __name__ == "__main__"语句下运行功能逻辑调试代码,这是为什么呢?可以分别在模块没被导入和被导入的两种情况下打印出__name__属性查看一下它们的区别如下(这里我们在同层目录下创建了另一个py用来导入之前的模块,然后分别查看__name__的输出是啥)
从上面两幅图的对比可以看得出
1. 在模块没有被导入的时候,当前模块打印出的__name__属性是__main__,而且是一个字符串
2. 在模块被导入之后上层调用的时候,__name__属性输出的是模块的名称即右图中的fuction_test
综上所述,我们在调试的时候只需要用if __name__ == "__main__"进行一个判断即可,如果相等(那就证明处在当前模块调试场景,运行调试功能函数),如果不等(那就证明是在上层调用,模块被导入场景,不需运行底层if __name__ == "__main__"中的函数),这样就满足了开发人员既可以当层调试工作,又可满足上层导入的工作。