一个故事带你理解if __name__ == '__main__'
如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'
酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题。
大家都知道:Python的一大优点就是里面的模块非常多——包括内置的模块与自定义模块。我们可以直接利用别人写好的模块去实现自己的需求,酱紫大大的提高了自己的开发效率。也就是说,有时候你可能只需要一些文献阅读的能力与基本的编码能力也可以实现很强大的功能!~~这也许就是Python在各行各业各处开花的原因吧/叹气/叹气/叹气。
一个故事带你理解if name == 'main'
某年某月某日,你正坐在工位的电脑前发呆,此时,你的老板从你背后亲切的拍了拍你的肩膀:“小A呀,公司有一个新的产品要开发,里面有一个模块需要实现登陆请求功能,这个功能你来写吧,巴拉巴拉巴拉(告诉你具体的需求)”。此时的你血脉喷张、血压暴涨。内心里一千万个草泥马奔腾而过:“我靠!好难!”
过了一个小时,你旁边工位的老死机王先生又亲切的拍了拍你的肩膀:“小A呀,别担心呀,公司上一个产品不是也有一个登陆请求的功能模块吗?直接拿来用就好了呀。”
“对呀!我不是学过引用么!那可是Ctr-C/V升级的技能呀!别人写的模块我直接拿来用就OK好了啊!”
于是,你以加班的名义于当天半夜悄悄打开了别人的电脑......
第二天,熬了一晚的你终于发现了登录模块~~~一个名为main.py的文件,里面的代码如下:
# main.py
def check():
print('我正在check...')
def register():
print('我正在注册...')
def login():
print('我正在登陆...')
check()
register()
login()
此时的你突然精神百倍、容光焕发!“我靠,真是穿破了铁鞋找呀找没找到,你竟然如此简单的就被我找到啦,啊哈哈哈哈哈!”
于是你趁热打铁,赶紧在同一个目录下
建了一个名为start.py的文件,用了python程序员专属的进阶复制粘贴功能————模块导入
:
# start.py
from main import login
login()
“万事俱备,只欠东风!接下来运行一下start.py我就可以跟老板要求升值加薪了,哇卡卡卡卡卡!”于是你点击运行了start.py......
而此时看到结果的你又开始血脉喷张、血压上升~“我靠!运行的结果为啥子会是酱紫的啊!”
我正在check...
我正在注册...
我正在登陆...
我正在登陆...
于是你赶紧检查代码:发现main.py文件里面除了login函数还有两个函数check与register,而且这个文件也运行了里面的三个函数,而运行的结果竟然跑到了你的start.py文件运行的结果中来了!
“这不科学呀!我只在我的文件里导入了login,没有导入其他的两个函数呀!而且我只运行了我自己的login呀!为啥main文件里的函数也会执行呢!!!”
此时的你感觉彻底陷入了绝境~想想早上看到老板那微微一笑的表情,心理不禁打了个冷颤~
“这该如何是好呀!”
而此时看到面有窘迫的你的老王再一次的来到了你的面前:“小A呀,在愁什么呢?”于是你把你的代码给老王看了看。
看完过后,老王露出了一丝意味深长的关心的微笑:“小A呀,你知道吗,当我们import一个模块的时候,Python解释器其实帮我们在后台执行了这个文件中的内容的,也就是说,由于你在start.py文件中import了main.py文件的函数,Python解释器会先执行main中的内容,然后再执行你自己的start文件中的代码的。而main文件中调用了它自己的三个函数,所以你执行的结果会包含main文件中执行的结果的。”
听完了老王的解释,你突然明白了,“嗖得寺内!那我直接把main文件中的函数粘贴进来不就可以了?哎呀,王叔,酱紫是可以,不过作为一个Python程序员,酱紫不是显得太Low了吗?而且如果以后别人的代码需要修改的话,我还得复制粘贴,酱紫太麻烦了,呜呜呜呜呜呜”
老王看着委屈的你,露出了关切的笑容:“小A呀,我没告诉你复制粘贴呀”随后,他亲切的摸了摸你的头说道:“来,叔叔帮你解决”,于是,老王帮你把main.py中的内容修改如下:
# main.py
def check():
print('我正在check...')
def register():
print('我正在注册...')
def login():
print('我正在登陆...')
if __name__ == '__main__':
check()
register()
login()
你自己的start.py文件的内容不变,随后,他运行了一下你的start文件,奇迹发生了:
我正在登陆...
结果只显示了一行!而且正是你要的结果!
“其实,if __name__ == '__main__':是在告诉Python编译器:下面的代码只有在运行我这个文件的时候才执行,当作为模块导入到别的模块的时候,编译器只编译它前面的内容,我们把函数的执行放在了if __name__ == '__main__':的后面,这样可以有效的避免在不需要的时候错误的调用了本模块的方法”
听完了老王的解释后,你顿时容光焕发!调试了几遍无误并感谢了老王后,兴冲冲地跑到了老板的办公室......
而此时,老王看着你开心的背影,脸上露出了父亲般的亲切的笑容......
未完待续.........
一个故事带你理解if __name__ == '__main__'的更多相关文章
- (转)Python中如何理解if __name__ == '__main__'
摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == ...
- 理解if __name__ == '__main__':
一开始没怎么注意这个语句,这两天在模拟知乎登陆时准备刨根问底了,先看两行代码片段 第一个例子:这是在login.py文件的一部分,其他我们忽略,只关注print()函数的内容 import time ...
- python中如何理解if __name__ == '__main__'
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ .这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行.我们通过一个简单的例子来理解 ...
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
- 理解 if __name__ == '__main__'
简单地理解Python中的if __name__ == '__main__' if __name__ == '__main__'的意思是: 当.py文件被直接运行时,if __name__ == '_ ...
- 如何理解 if __name__ == "__main__"
小明.py 朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'), 你编程很好, 朋友调你去帮他写程序(import 小明, 这 ...
- 爸爸和儿子的故事带你理解java线程
今天回想线程方面的知识,发现一个非常有意思的小程序.是用来说明多线程的以下贴出来分享下,对刚開始学习的人理解线程有非常大的帮助 爸爸和儿子的故事 <span style="font-f ...
- 一篇漫画故事带你理解透HTTPS(下)
上下集知识点总结: 前情提要: 蝙蝠纪元,疫情之下.二丫欲访问京东购物,不料弹出安全提示,遂找二毛一探究竟.二毛一顿排查后,开始用通俗易懂的语言深入浅出的向二丫解释 HTTP作用及优缺点.HTTPS的 ...
- 一篇漫画故事带你理解透HTTPS(上)
2020年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ...
随机推荐
- Python统计excel表格中文本的词频,生成词云图片
import xlrd import jieba import pymysql import matplotlib.pylab as plt from wordcloud import WordClo ...
- Raspberry Pi 安装配置 Home Assistant
家庭助理(Home Assistant)是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制.跟踪和控制家里的所有设备, 并自动化控制,能完美的运行在树 ...
- 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...
- 将lvm逻辑卷分出一部分
今天公司磁盘报警,查看磁盘发现挂载的/aa空间还很多,而/ee 空间不足,现将/aa上的lvm分出一部分空间.加到/ee上 注:首先要 df -T -h 开一下磁盘格式如果是xfs格式的lvm ...
- AI之旅(6):神经网络之前向传播
前置知识 求导 知识地图 回想线性回归和逻辑回归,一个算法的核心其实只包含两部分:代价和梯度.对于神经网络而言,是通过前向传播求代价,反向传播求梯度.本文介绍其中第一部分. 多元分类:符号转换 ...
- 图解HTTPS协议
原文出处: leezhong的博客 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实 ...
- MySQL 报错 1093
[Err] 1093 - You can't specify target table 'user' for update in FROM clause 报错的sql如下: delete from ` ...
- Golang安装与环境的配置
(一) 不需FQ的情况 打开https://studygolang.com/ 下载相应的系统安装包. (二) 安装与环境配置 linux: 解压到指定目录: sudo tar zxvf [安装包的下载 ...
- adb环境配置+常用adb命令+Logcat命令的用法+手动进行文件比对的方法+批量挪bug
1. adb环境配置:下载adb环境变量包:打开计算机属性-高级系统设置-环境变量:新建变量adb,值为刚才的环境变量包路径:编辑path值,在最后面加上;%adb%;确定就妥了 2. 常用adb命令 ...
- 陈斌python语言基础与应用00
软件改变生活:购物.餐饮.商旅出行.资料查找... Everybody in this country should learn how to program a computer...because ...