美文网首页
如何理解if __name__ == '__main__'语句

如何理解if __name__ == '__main__'语句

作者: Xyxtank | 来源:发表于2019-07-08 14:08 被阅读0次

    一、背景

    经常在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),不然谁能分别你。

    相关文章

      网友评论

          本文标题:如何理解if __name__ == '__main__'语句

          本文链接:https://www.haomeiwen.com/subject/plkohctx.html