程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

python中 "__name__" 详解

发布于2019-08-06 10:45     阅读(1042)     评论(0)     点赞(1)     收藏(0)


在py文件中经常看到__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
1、直接运行temp2.py __name__="__main__"
在这里插入图片描述

2、在其他程序中导入temp2.py
在这里插入图片描述

所以,__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、这样问题就产生了,经理调用你的模块时,会运行你的测试内容,如图:
调用该模块的效果

***当然你可能会想,没关系的,我只要给经理之前删除测试相关内容,问题就解决了。

是的确实可行,只是通常经理可能会发现模块的问题,或者是实现的效果需要调整,那么我们再次修改模块,那可能需要再次添加这些测试信息,交付的时候还需要删除它,显然它不是最佳方案。

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",测试内容自然就不会被执行,完美的解决了上述问题。


结语:初学者大多写的都是代码片段,模块大多也是直接运行,所以该语句没有起到作用,实际工作就别忘了加上它。



所属网站分类: 技术文章 > 博客

作者:美美哒

链接:https://www.pythonheidong.com/blog/article/7855/0d14e51d89a7152e0571/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)