python中 "__name__"的实际应用

Python源码中经常看到__name__,新手可能会有些懵,它是做啥的?为什么要这样写?

#代码示例:
a={"1":[1,3], "2":[3,5], "3":[4,6]}
b= "abcdefghijk"
c="de"
def matchTest(key):
    res = eval('b'+str(a[key]).replace(',',':'))
    print(res)
if __name__ == '__main__':
    matchTest('1')

一、__name__的作用:__name__是python的一个内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称。
比如图中源码temp2.py:

A、直接运行temp2.py 时:__name__="__main__"
python中

B、在其它程序中导入temp2.py,则:__name__="temp2.py"
python中


所以__name__的主要作用就是用来区分,模块是直接被运行还是被导入。

二、实际项目的应用

具体情境:
1、项目领导给你安排一个任务,写一个生成组合列表的模块。
2、通常编写完成程序代码,会在结尾写上一些测试信息,来验证程序是否正确。如图:
# BuildComb.py
from itertools import combinations
def build_combination(n,k):
    result = combinations(range(n),k)
    return result
    
#-----------------------------------------------------------------------
#以下为针对模块的测试信息
a = build_combination(4, 3)
for i in a:
    print(i)
3、这样就产生了一个问题,领导引用你的模块,也会运行这个测试内容,如图:

python中


**当然,可以在交付领导之前删除测试相关内容。只是通常领导可能会发现模块的问题,或者是需求本身调整。那么再次修改模块,就需要再次添加这些测试信息,交付的时候还需要删除它。如果是复杂一些的模块,反反复复自然就影响效率。

4、这时只要在测试内容前面加上:if __name__ == '__main__':
# BuildComb.py
from itertools import combinations
def build_combination(n,k):
    result = combinations(range(n),k)
    return result
    
if __name__ == '__main__': #程序被导入,以下代码不被执行
	a = build_combination(4, 3)
	for i in a:
	    print(i)

那么,编写调试过程直接运行该模块时__name__ = "__main__",测试内容被执行。
而领导调用它,__name__ = "BuildComb",测试内容则不会被执行,完美的解决了这个问题。

结语:初学者大多写的都是代码片段,模块大多也是直接运行,所以该语句没有起到作用。为了养成一个良好的编程习惯,建议平常编写代码就使用它。

你可能感兴趣的:(python)