一个故事带你理解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年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ...
随机推荐
- web页面空白,无任何显示
解决前: 解决后: 原因:HTML代码有误,没有关闭script标签. 解决方法:加</script>
- 使用SQLsever批量查询TXT文本中的值
测试文档如下,需要查到case_no值为以下时,对应的单据信息分别是什么. 步骤如下: 在txt文本中 Ctrl+H,输入如下,点击“全部替换” 在word文本中,复制以上信息到word文本中,目的是 ...
- 添加PROPAGATION_REQUIRES_NEW 事务没有产生作用
最近在做事务添加时 发现自己的事务没有新建,上网查到 仅用作收藏. 其二 注意 事务的注解 应该在 内层的事务上面 一.描述Spring遇到嵌套事务时,当被嵌套的事务被定义为“PROPAG ...
- mybatis 类创建流程
Configuration ---> XmlConfigBuilder ---> SqlSessionFactoryBuilder ---> SqlSessionFactory(Co ...
- word中编辑论文公式对齐问题
这里只说在word中编辑公式时,公式居中,编号右对齐的情况. 在编辑公式时,我平时就是右对齐,然后通过敲击空格键进行公式的居中,然而这样并不美观.所以接下来学习一下: 1)首先打开视图-->标尺 ...
- HDU - 6203:ping ping ping (DFS序 贪心)
pro:给定N+1个点的树,有M对关键点,现在让你破坏最少的点,使得M对关键点不连通. sol:贪心,我们把M对点按照LCA深度排序,每次破坏LCA. 如果一对点(u,v,lca),u-lca-v有点 ...
- Spring Boot 框架的依赖管理
Spring Boot为完成不同需求的Spring应用构建,提供了多种不同的依赖管理模板,每种模板均为一系列已完成的依赖的管理.例如在我们的入门程序中,需要构建web项目,我们只需添加spring-b ...
- less--入门
Less(Learner Style Sheets)是向后兼容css扩展语言. 变量(Variables) @width: 10px; @height: @width + 10px; header{ ...
- 第二章代替netcat连接无响应
按照书上的代码手打到电脑上以后,在两个终端输入了./bhnet.py -l -p 9999 -c和./bhnet.py -t localhost -p 9999之后发现没什么反映,所以又用nmap 1 ...
- Python之进度条及π的计算
Python之进度条及π的计算 文本进度条 1. 简单的开始 这是利用print()函数来实现简单的非刷新文本进度条.它的基本思想是按照任务执行百分比将整个任务划分为100个单位,每执行N%输出一次 ...