时间:2023-02-20 05:10:01 | 来源:建站知识
时间:2023-02-20 05:10:01 来源:建站知识
戏说python的特殊变量 __name__:__name__
__name__
,说实话,我不想看到它,有点丑,这就像在现实生活中有名字人叫一二三狗子三二一
之类的。说到丑啊,我实在是不得不想起之前的一个让人哭笑不得的事情“身份证为什么拍得这么丑?”因为拍的太漂亮太好看,你就会到处炫耀,谁知道哪一天给别人欣赏你的“秀色可餐”的面容的时候忘记拿回来,弄丢了。想想觉得很有道理!真的感谢公安人员的良苦用心啊!!!
内置变量
,写成这样就是防止你编程的时候取变量名的用到这个名字,你会用一二三狗子三二一
给自己的娃取名?(变量命名要么是_
开头,要么是英文字母
开头)。那它表示什么意思呢?它的意思就是运行的程序的名字(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.py
的marry()
删除,在test.py
里面执行marry()这个方法
,然把之前的test.py
里面的内容换成下面这个,(记得把test.py
和cuihua_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
。.py
文件的时候,这个文件里面的__name__
就是__main__
,如果不是直接执行,而是被另外一个.py
文件import
的时候,这个文件里面的__name__
是这个py
的文件名。__name__
可以对程序进行调试,如果说当程序之间互相之间调用,比较复杂的关系的时候,使用if __name__ == '__main__':
将执行的代码放在里面,在执行其他的程序的时候,测试的程序本身不会运行,而这个程序有问题的时候,可以执行这个文件,那么if __name__ == '__main__':
里面的代码就执行了。关键词:变量,特殊