如何理解if-__name__-==-'__main__'语句
一、背景
经常在python程序中会使用这条语句,但是却习以为常,并没有真正理解其含义,那它具体的含义,有什么作用呢?其实它的作用就是为了控制程序的执行过程。
import unittest
class Test(unittest.TestCase):
def setUp(self):
num = input('please input a number:')
self.num = int(num)
def test_case(self):
self.assertEqual(self.num,12,msg='wrong! number is not 12')
def tearDown(self):
pass
if __name__ == '__main__':#控制程序的执行过程
unittest.main()
要理解它使用方法,需要知道:.py文件是可以直接执行,就像一个程序一样;另外,.py文件也可以作为模块被导入,使用import语句就能实现。
所以,python中if __ name __ == '__ main__':语句就是为了判断.py文件执行的方式,它是直接执行,还是说被作为模块导入后执行,从而控制执行的过程。下面用实例进行说明:
二、python实例说明
1、python中__ name __方法
首先,需要了解 __ name__ 是属于 python 中的内置类属性,就是它会天生就存在与一个 python 程序中,代表对应程序名称。
比如所示的一段代码里面(这个脚本命名为 test.py),我只设了一个函数,但是并没有地方运行它,所以当 run 了这一段代码之后我们有会发现这个函数并没有被调用。
但是当我们在运行这个代码时这个代码的 __ name__ 的值为 __ main__ (一段程序作为主线运行程序时其内置名称就是 __ main__)。
2、直接执行程序
创建一个.py文件,文件名为test.py,直接执行程序
print('hello world')
print(f"the test.py __name__ is :{__name__}")
if __name__ == '__main__':
print("repeat! hello world")
结果:
hello world
the test.py __name__ is :__main__#段程序作为主线运行程序时其内置名称就是 __main__
repeat! hello world
此时,直接执行程序时,它作为主线运行程序时其内置名称就是 main
3、作为模块导入执行
创建一个.py文件,文件名为import_test.py,在程序中将test.py作为模块导入
import test
print('this is import_test')
print(f"the import_test.py __name__ is :{__name__}")
结果:
hello world
the test.py __name__ is :test #当这个 test.py 作为模块被调用时,则它的 __name__ 就是它自己的名字
this is import_test
the import_test.py __name__ is :__main__
此时,test.py中的__ name __ 变量值为test,不满足__ name __ =="__ main__"的条件,因此,无法执行其后的代码“repeat! hello world”。
总之,在程序主体中,我自己就是(__ main__ ),我自己叫我自己那就是我(__ main__),若别人要引用我或者叫我,那就不能再用我了,应该叫我的真实名字(test.py),不然谁能分别你。