如何理解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),不然谁能分别你。

posted @ 2020-02-25 23:17  xyztank  阅读(174)  评论(0编辑  收藏  举报