问题描述
最近有小伙伴在学习python自动化测试的时候遇到了一个问题,下面我直接奉上代码。
解决方案
若要让此程序执行很简单只需在最后一行代码unittest.main()前加一行代码if__name__==”__main__”:方可执行。那么到这里我们为什么只需加一行代码就能使程序执行呢?下面我们将详细的说明if__name__==”__main__”:的原理及用法。
if__name__==”__main__”:的用法:
首先是一个python文件有两种使用方法,第一是作为脚本文件直接运行,第二种是通过调用的方法(第三方库)执行。
而if__name__==”__main__”:的作用就是控制这两种情况执行代码的过程,在if__name__==”__main__”:下面的代码只有在文件作为脚本直接执行时才会被执行,而在第二种情况下if__name__==”__main__”:之后的代码是不被执行的。下面我们用代码来说明这个情况。
直接执行:
我们将文件名命名为test.py,执行结果为
调用执行:
我们在同一文件夹下创建一个python文件,在文件中输入代码
执行情况为
通过实例我们不难看出if__name__==”__main__”:的用法,下面我们再来看看if__name__==”__main__”:的原理。首先献上几张图。
在之前的代码中加入一行代码print("__name__",__name__),输出的代码我们不难看出这里的__name__等于__main__所以if__name__==”__main__”:之后的代码会被执行。
而在调用了test.py文件(第二种情况调用)的python文件中输出的结果为
从代码中我们得出的__name__等于test。所以if__name__==”__main__”:之下的代码不被执行。
每个python文件都包含内置的变量__name__,当文件被执行的时候,__name__等于文件名(包含后缀.py),如果文件import调用到其他文件中,则该文件的__name__等于文件名称(不包含后缀.py)。”__main__”始终等于执行文件的名称(包含后缀.py),所以当模块被直接执行时__name__==”__main__”结果为Ture。
结语
通过上面的归纳,其实理解起来还是有一定的难度,当初我自己理解也是花了很长的时间,上述讲解的代码希望python小白下去实战,将代码理解正确那么if__name__==”__main__”:的使用将不是问题。