python为什么要使用if __name__ == “__main__”:
本文为wangluoshenghuo.com原创,转载请注明出处。
要说明这个问题,首先要了解__name__和“__main_”_这两个符号是什么意思。
__name__是一个变量,是当前包的名称。
而“__main__”是字符串,是你运行的包的__name__在运行时的值。
为什么要在写python程序时,常常使用if name__ == “__main“:来进行判断?
原因是:在没有被其他程序import的情况下,运行判断语句。如果这个python文件被调用,__name__是调用程序的值,与字符__main__不等,就不能运行下面的语句。这样做的好处是方便在本模块下测试自己的代码。而在调用的时候,对于调用者来说,不能满足条件,而忽略自己的调试代码。
还是有点晕,举例说明:
假设我们写一段程序命名为test.py,如下:
1 def Test(): #定义一个Test函数,用于这次测试
2 print(__name__) #打印变量__name__的值
3 print('********************') #用于分隔,便于观察print输出的值的变化
4 print("__main__") #打印字符串__main__
5 print('------------------') #用于分隔
6
7 if __name__ == "__main__": #判断,如果__name__的值等于字符串__main__,执行下面的语句。
8 Test()
9 print('test by if')
test.py运行结果:
[eyeglasses@s97912 ~]$ python test.py
__main__
********************
__main__
------------------
test by if
说明:
#第一次执行test.py没有import输入,直接执行。
[eyeglasses@s97912 ~]$ python test.py
#首先执行判断if __name__ == "__main__":是否为真。
__main__ #我们可以看到__name__的值是__main__,而不是test.py.
********************
__main__ #对应print("__main__")语句。
------------------
#打印了print('test by if')语句
test by if
为了对比,再写两段代码,非常简单,用于调用test.py,名称为test1.py。
from test import Test #调用test.py里的Test函数
Test()#执行这个函数。
test1.py运行结果:
[eyeglasses@s97912 ~]$ python test1.py
test
********************
__main__
------------------
说明:test.py里的Test()被调用,print(__name__)打印出来是test,明显不满足条件if name__ == “__main“:,test.py里面if下面的语句是不会被执行的。而我们在执行test.py是可以执行if下面的语句。
这样我们就可以test.py里面测试自己的程序,而不会受到外面的干扰或其他程序错误调用你自己的测试程序。这就是(if name__ == “__main“:)的作用。