python if main_Python:if __name__ == '__main__'

简介:

__name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行。

关于代码if __name__ == '__main__': 下面举几个例子解释下:

先编写一个测试模块add1.py

#!/usr/bin/env python3#-*- coding: utf-8 -*-

'a test module'

defaddFunc(a,b):return a+bprint('add1计算结果:',addFunc(1,1))

再编写一个模块add2.py来调用上面的模块:

#!/usr/bin/env python3#-*- coding: utf-8 -*-

'a test module'

importadd1print('调用add1模块执行的结果是:',add1.addFunc(12,23))

在刚才两个模块的路径(我的路径为:“C:\work”)中打开cmd,用命令行运行add1.py:

C:\work>python add1.py

add1计算结果:2

在刚才两个模块的路径中打开,用命令行运行add2.py:

C:\work>python add2.py

add2计算结果:2调用add1模块执行的结果是:35

#显然,当我运行add2.py后第一句并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量:__name__ #注:name两边各有2个下划线__name__有2个取值:当模块是被调用执行的,取值为模块的名字;当模块是直接执行的,则该变量取值为:__main__

于是乎,被调用模块的测试代码就可以写在if语句里了,如下:

#!/usr/bin/env python3#-*- coding: utf-8 -*-

'a test module'

defaddFunc(a,b):return a+bif __name__ == '__main__':print('add1计算结果:',addFunc(1,1))

当再次运行add1.py:

C:\work>python add1.py

add1计算结果:2

#结果并没有改变,因为调用add1.py时,__name__取值为__main__,if判断为真,所以就输出上面的结果

当再次运行add2.py:

C:\work>python add2.py

调用test模块执行的结果是:35

#此时我们就得到了预期结果,不输出多余的结果。能实现这一点的主要原因在于当调用一个module时,此时的__name__取值为模块的名字,所以if判断为假,不执行后续代码。

所以代码iif __name__ == '__main__': 实现的功能就是Make a script both importable and executable,也就是说可以让模块既可以导入到别的模块中用,另外该模块自己也可执行。

学过c语言的话,可以知道C语言定义主程序入口就是main()函数,main代表了程序主入口,即和系统的接口(说白了就是命令行直接调用)。if name == 'main': 这句话的核心无非就是在判断该程序文件是否作为主程序入口罢了。 如果在命令行直接调用该程序文件,该文件作为主程序入口,name == 'main'理所当然啊。 如果在命令行调用其他程序文件,主程序入口name == 'main'自然不成立,因为main等于那个你在命令行输入的程序名。 这个东西的好处就是,别人调用时(你并非是主程序入口)后面的东西不运行,自己命令行执行时(你是主程序入口)后面的东西运行。故可以作为测试用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql select 反选_JQuery实现全选、全不选和反选功能

Insert title here学员信息查询管理系统条件:全选 反选学号姓名性别年龄成绩班级$(selectStu())functionselectStu() {$.ajax("StuList",{type:"post",data:{"method":"finList"},success:function(data){//循环遍历$.each…

真希望永远用不到这些代码

<style> html{filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1);} </style> 汶川大地震的时候用过一次&#xff0c;如今又要用了……

为什么盯一个字看久了,反而感觉不认识了?

全世界只有3.14 % 的人关注了爆炸吧知识你肯定有过这样一种体验——长时间盯着某个字看&#xff0c;或者重复写一个字&#xff0c;就会觉得这个字越写越不认识想想你被老师罚抄作业的时候……盯着这张图看1分钟▼你是不是就不认识“哈”了神经活动被你“玩累”了盯着一个字看久…

自建PicGo图床

介绍图床工具&#xff0c;就是自动把本地图片转成连接的一款工具&#xff0c;网络上有很多图床工具&#xff0c;PicGo就是一款比较优秀的图床工具&#xff0c;可以支持微博&#xff0c;七牛云&#xff0c;腾讯云COS&#xff0c;又拍云&#xff0c;GitHub&#xff0c;阿里云OSS&…

3D 架设场景

指定视口glViewport指定投影变换glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(30, 1, 0.1, 50);指定视图变换glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);gluPerspective(GLdouble fovy,G…

【心情】今天买了ZÈRTZ!

转载于:https://www.cnblogs.com/boringlamb/archive/2010/04/27/1721772.html

promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...

【简答题】一、谈谈你是如何理解JS异步编程的&#xff0c;EventLoop、消息队列都是做什么的&#xff0c;什么是宏任务、什么是微任务&#xff1f;如何理解JS异步编程众所周知JavaScript语言执行环境是“单线程”(单线程&#xff0c;就是指一次只能完成一件任务&#xff0c;如果…

python姓名输出语句_Python最基本的输入输出详解

输出用print加上字符串&#xff0c;就可以向屏幕上输出指定的文字。比如输出hello, world&#xff0c;用代码实现如下&#xff1a;>>> print hello, worldprint语句也可以跟上多个字符串&#xff0c;用逗号“,”隔开&#xff0c;就可以连成一串输出&#xff1a;>&g…

当代人的恋爱步骤

1 耳朵连线了&#xff1f;2 有时候我们更需要做一个稳重的吃货3 你大爷果然是你大爷… 4 我竟然下意识的吹了一口5 这也太孤独了6 当代人的恋爱步骤7 据说这张图上有10个人&#xff0c;你能找到几个&#xff1f;你点的每个赞&#xff0c;我都认真当成了喜欢

使用EF Core操作层次结构数据

前言以前我们存储层次结构常用IdParentId的方式&#xff0c;例如&#xff1a;IdParentIdName1null总公司21分公司131分公司242部门A54小组X64小组Y这种方式查询效率不高&#xff0c;比如查询分公司1下的所有小组&#xff0c;必须使用递归。针对这个问题&#xff0c;如果你是使用…

sql2005数据导入出错问题

最近在把一个大的文本文件中的数据导入到sql2005中时&#xff0c;出现错误。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />相同文件导入sql2000则不会出现错误。网络上一查&#xff0c;也有部分人碰到这个问题。解决的办法200…

仿UC菜单的实现

http://blog.csdn.net/hellogv/archive/2011/01/28/6168439.aspx &#xff08;另&#xff09;http://www.cnblogs.com/lichien/archive/2010/09/07/1820453.html 先来看看本文程序运行的效果&#xff1a; TabMenu 本身就是一个PopupWindow&#xff0c;PopupWindow上面放了两个G…

java将字符串转成json_Java 字符串(String)格式转json格式

json是前后端传输数据的一种文本格式&#xff0c;json其实就是字符串&#xff0c;因为前后端传输数据时&#xff0c;只能传输字符串&#xff0c;我们又想传一些对象或者列表信息&#xff0c;这都是很常见的应用场景。所以&#xff0c;我们需要在java代码中&#xff0c;把java中…

选了combobox里的选项后没激发change事件_stata 事件分析法

前言&#xff1a;因为一些原因&#xff0c;国庆节期间学的。学习过程很酸爽&#xff0c;自己并没有很多统计学及其相关软件的经验&#xff0c;网上相关资料也不是很多。我在微信公众号、知网、经管之家、B站、百度文库等很多平台找了各式的资料来学&#xff08;花了70大洋去买代…

RHCE 学习笔记(24) - LVM 逻辑卷

这一节学习了如何创建LVM&#xff0c;LVM的快照以及RAID的相关配置。对于普通的分区&#xff0c;扩展度不高&#xff0c;一旦分区格式化完成&#xff0c;很难灵活的再增加或者减少分区大小。为了解决这个问题&#xff0c;可以使用LVM&#xff08;逻辑卷&#xff09;。基本过程是…

13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美

全世界只有3.14 % 的人关注了爆炸吧知识你知道吗&#xff1f;Twitter logo 原来是13个圆画出来的&#xff0c;果然设计师们都是牛逼的存在&#xff01;受到 Twitter logo 设计方式的启发&#xff0c;加拿大艺术家多洛塔潘科夫斯卡决定尝试挑战自我&#xff1a;利用同样的方式&a…

什么时候使用路由再分配?

什么时候使用路由再分配?<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />路由再分配通常在那些负责从一个自治系统学习路由&#xff0c;然后向另一个自治系统广播的路由器上进行配置。如果你在使用I G R P或E I G R P&#xff…

温故知新,.Net Core遇见WinForms客户端窗体框架,在DotNet Core大一统基础上老树发芽...

什么是WinFormhttps://docs.microsoft.com/zh-cn/dotnet/desktop/winformsWindows窗体(Windows Form)&#xff0c;简称WinForms&#xff0c;是一个可创建适用于Windows的丰富桌面客户端应用的UI框架。Windows窗体开发平台支持广泛的应用开发功能&#xff0c;包括控件、图形、数…

Oracle session连接数和inactive的问题记录【转】

从上周起&#xff0c;服务器Oracle数据库出现问题&#xff0c;用不到半天&#xff0c;就会报maxsession&#xff08;150&#xff09;的问题&#xff0c;肯定是数据库的会话超过最大数了。 由于服务器跑的是文件传输应用&#xff0c;占用的请求和会话肯定很大&#xff0c;因此…

a 寻路算法 java_A*(也叫A star, A星)寻路算法Java版 | 学步园

寻路首先要理解什么是A*寻路算法&#xff0c;可以参考这三篇文章&#xff1a;下面为测试地图&#xff0c;0表示可以通行&#xff0c;1表示障碍物&#xff1a;要从点(5, 1)到点(5, 5)&#xff0c;通过A*寻路算法找到以路径为所示&#xff1a;在代码中可以修改障碍物&#xff0c;…