18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > 戏说python的特殊变量 __name__

戏说python的特殊变量 __name__

时间:2023-02-20 05:10:01 | 来源:建站知识

时间:2023-02-20 05:10:01 来源:建站知识

戏说python的特殊变量 __name__:

python特殊变量__name__

最近看一些代码的时候经常看到__name__,说实话,我不想看到它,有点丑,这就像在现实生活中有名字人叫一二三狗子三二一之类的。说到丑啊,我实在是不得不想起之前的一个让人哭笑不得的事情

“身份证为什么拍得这么丑?”
因为拍的太漂亮太好看,你就会到处炫耀,谁知道哪一天给别人欣赏你的“秀色可餐”的面容的时候忘记拿回来,弄丢了。想想觉得很有道理!真的感谢公安人员的良苦用心啊!!!

这个变量就是python的内置变量写成这样就是防止你编程的时候取变量名的用到这个名字,你会用一二三狗子三二一给自己的娃取名?(变量命名要么是_开头,要么是英文字母开头)。那它表示什么意思呢?

它的意思就是运行的程序的名字(name)。
首先写一个简单的python程序看一看,把这句话存到test.py中运行一下:

print("NAME IS : " + __name__)运行python test.py,结果是:

NAME IS : __main__咋地又来了一个一二三翠花三二一__main__)?哈哈,你没有看错,这个内置变量的真实名字(值)是__main__

好吧!感觉python这个世界有着形形色色的东西啊!

那它有着啥子用呢?

在一些代码中你可能经常看到这个写法:

if __name__ == '__main__': balabala...代码翻译过来就是,如果这个程序的名字__main__,那么就balabala...,那刚才我们试了,程序的名字就是__main__这个翠花大西瓜啊!为啥还做这个判断呢?难道是下雨天打孩子——闲着也是闲着?

嘿!如果把__name__放在函数里面是不是会神秘一些呢?我们把下面这些代码保存到cuihua_and_dog.py里面

# cuihua_and_dog.py# 声明一个函数,这个用来试验(名字我都给取好了,叫翠花狗子)def marry(): baby = "cuihua" + "dog" print(__name__ + "'s baby is : " + baby)marry()当直接运行python cuihua_and_dog.py的,结果是:

__main__'s baby is : cuihuadog结果__name__还是和之前的那样,还是__main__

这样太直接的运行cuihua_and_dog.py实在是没意思,我们来回到狗子翠花小的时候!我们不这么直接的运行它,我们把它当做模块或者说包来运行看看会怎样!把cuihua_and_dog.pymarry()删除,在test.py里面执行marry()这个方法,然把之前的test.py里面的内容换成下面这个,(记得把test.pycuihua_and_dog.py这两个文件放在一个文件夹里面)

# test.py# 从cuihua_and_dog包里面导入marry方法到这里来from cuihua_and_dog import marrymarry()然后运行python test.py,结果是:

cuihua_and_dog's baby is : cuihuadog__name__名字终于变了,看来老天也觉得这个名字好!就这个了翠花狗子,哈哈!

按照上面看,cuihua_and_dog.py在两种不同的运行方式里,__name__不一样:

cuihua_and_dog.py --> __main__+----------+ /| | / 直接运行| __name__ | -------| | / 当做包运行+----------+ / --> cuihua_and_dog就是说,当这个程序直接运行的时候,__name__的值就是__main__,如果作为包运行的时候就是包名。到这里应该理解了为什么__name__的值会是 __main__了吧,也是为了防止我们把包的名字取为这个。

回到刚才那个if __name__ == '__main__':这句话上面来,想一下,如果说是直接执行这个程序的话,那么这个判断就成立了,那就执行if里面的代码;如果是被当做包运行,那就不会运行if里面的代码。

一般在执行程序的时候,直接执行的那个是父亲,被加载的包是子女

但是翠花和狗子小时候(当做包运行)怎么可能会结婚呢?这样做不行,既然可以用if来判断,我们改一下cuihua_and_dog.py里面的代码:

# cuihua_and_dog.pydef marry(): if __name__ == "__main__": # 翠花狗子长大了(直接执行) baby = "cuihua" + "dog" print("baby is : " + baby) else: # 翠花狗子还是小时候(被当做包导入执行) print("They are the kids! It is a guojiajia game!")# 翠花狗子长大了(直接执行)if __name__ == "__main__": # 这里我们来布置一下婚礼现场,不能太直接,我们拐弯抹角一下 # 将这个函数不要说得这么直接,我们说这一天是快乐幸福的一天 OneFineDay = marry() # 这里到婚礼进行之前我们揭晓了 print("One Fine Day is : " + OneFineDay.__name__ ) # 结婚有了爱情的结晶 print("As time went by, They had a crystallization of love") OneFineDay()这样我们在回头来执行一下python test.py,结果是:

They are the kids! It is a guojiajia game!但是当翠花和狗子长大了(我们直接执行)的时候python cuihua_and_dog.py,结果是

One Fine Day is : marryAs time went by, They had a crystallization of lovebaby is : cuihuadog从这里我们又可以看到,如果直接用__name__的话那么就是代表当前这个包的名字。另外也可以知道函数的名字,例如上面写的OneFineDay.__name__,因为最原本的函数名是 marry ,所以这里是显示的marry,而不是 OneFineDay

好的,狗子与翠花的故事完结了,很圆满。

总结

参考

python:浅析python 中__name__ = '__main__' 的作用

之前写在简书上的,那个上面的格式渲染的好看一些,具体的可以

,为了方便在本站上复制了一下。如需转载,望能注明来源

关键词:变量,特殊

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭