一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用
文章目录
- 前言
- 正文
- .py源文件
- 实例现象
- 运行原理
前言
相信大部分开发者对于“程序入口”这个概念并不陌生。对于很多编程语言来说,程序都必须要有一个入口,比如既保留C语言面向过程思想又有面向对象思想的语言C++等,以及完全面向对象的编程语言Java、C#等,都需要一个main函数作为程序的入口,也就是程序的运行会从main函数开始。Java、C#中都必须要有一个包含main方法的主类作为程序的入口。
但python不同,它属于脚本语言,不像编译型语言那样先将程序编译为二进制文件再运行,而是动态逐行解释运行,也就是从脚本第一行开始运行,没有统一的入口 。
正文
.py源文件
一个Python源文件(.py)除了可以直接运行外,还可以作为模块(也就是库),被其他.py文件导入。
不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码的层次)。而当作为模块被导入时,我们可能只希望被导入文件中一部分代码被运行。
实例现象
1. 假设现在有一个存储常量圆周率Π的源文件constNum.py,里面只有一个打印常量的方法:
PI=3.1415926535def main():print("Π的值为:",PI)main()
执行结果:
2、还有一个是计算圆面积的源文件calculateArea.py,这个文件需要导入上面文件,仅使用里面的常量Π:
from constNum import PIdef calc_round_area(radius):return PI*(radius**2)def main():print("this round area is : ",calc_round_area(2))main()
执行结果:
上面实例中,计算圆面积的源文件仅导入了常量Π,并没有想使用常量文件中的方法,而程序实际的执行结果可以看到,它把包含Π常量的文件中的方法也执行了。这并不满足需求。(实际需求是仅使用常量Π,不使用打印常量的方法,最终执行结果只打印出面积)。
3、现在,我们对constNum.py文件进行修改,增加“if __name__ == '__main__':”,把自定义的打印方法写在这个方法里面:
PI=3.1415926535def main():print("Π的值为:",PI)if __name__ == '__main__':main()
再次运行计算圆面积源文件,输出结果为:
增加 “ if name == ‘main’: ”后,可以看到输出结果就是我们实际需求中的样子了。
运行原理
前面说到一个.py文件的作用:①可以直接作为脚本执行;②import到其他的python脚本中被调用执行。
“ if __name__ == '__main__': ”的作用就是控制这两种情况执行代码的过程。在“ if __name__ == '__main__': ” 下的代码只有在第一种情况下(该文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
每个python模块(.py文件)都包含内置的变量_name_,当模块运行的时候,_name_等于文件 名(包含了后缀.py)。如果import到其他模块中,则_name_等于模块名(不包含后缀.py)。而“_main_”等于当前执行文件的名称(包含了后缀.py)。所以,当模块被直接执行时,__name__ == '__main__ 结果为true,就执行对应的方法;而当模块被import到其他模块时,__name__ == '__main__结果为false,就不调用对应的方法。
一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用相关推荐
- python中使用“if __name__ == '__main__'”语句的作用
首先用最简洁的语言来说明一下 if __name__ == '__main__': 的作用:防止在被其他文件导入时显示多余的程序主体部分. 先举个例子,如果不用if __name__ == '__m ...
- 如何简单地理解Python中的if __name__ == '__main__'
如何简单地理解Python中的if __name__ == '__main__' 文章目录: 一.摘要 二. 程序入口 虽然已经知道这个具体的用法,但是这篇文章有很多细节写的还是很好,决定转载一下,日 ...
- 2020-12-11 Python中的 if __name__ == “__main__“
Python中的 if __name__ == "__main__" 对于Python初学者来说,在看别人代码时经常会看到if __name__ == "__main__ ...
- Python 中的 if __name__ == __main__ 该如何理解
Python 中的 if __name__ == "__main__" 该如何理解 原文链接: http://blog.konghy.cn/2017/04/24/python-en ...
- python中使用if __name__ == '__main__':
引子 在python中,假设在一个test1.py的模块中定义了一个foo函数,然后调用函数foo进行测试的时候会产生一个内存空间.当你把这个模块导入到test2.py模块中,接下来如果在test2. ...
- Python中的if __name__ == ‘__main__‘
if name == 'main'的意思是:当.py文件被直接运行时,if name == 'main'之下的代码块将被运行:当.py文件以模块形式被导入时,if name == 'main'之下的代 ...
- 如何快速简单粗暴地理解Python中的if __name__ == ‘__main__‘
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- 解惑(二)----- 如何通俗地理解Python中的if __name__ == ‘__main__‘
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- 简单理解Python中的if __name__ == '__main__'
1. 摘要 通俗的理解__name__ == 'main':假如你叫小明.py,在朋友眼中,你是小明(name == '小明'):在你自己眼中,你是你自己(name == 'main'). if na ...
最新文章
- 2.1.Linux系统下启动MySQL的命令及相关知识
- Java 读写锁实现原理
- springboot scheduled多线程
- 刘强东事后首发声;拼多多入局 AI ;三星手机 CEO 承认危机 | 极客头条
- spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据
- django orm 操作表
- 9、kubernetes之statefulset控制器
- SpringBoot源码篇:Spring5内置tomcat实现code-based的web.xml实现
- 华为手机邮箱发件服务器端口设置,华为手机设置-华为手机POP3设置
- 说说自己,向前看远些,路还要走下去的
- 一文道尽Flutter最新最全的学习资料
- html 的title中显示网页logo
- 在头条号和西瓜视频发布视频,播放量20万,却是零收益?
- NOI Online #2 普及组 第二题:荆轲刺秦王
- vue-路由篇页面跳转和页面参数传递
- 代币标准--ERC721协议源码解析
- 【locust】使用locust + boomer实现对接口的压测
- excel锁定单元格不能修改_Excel如何保护特定的数据不被更改?
- python2.x 默认编码问题
- 自动化办公|办公软件和亿图脑图MindMaster快捷键
热门文章
- Vagrant+VirtualBox版本的坑
- JavaScript 是传值调用还是传引用调用?
- graph driver-device mapper-04libdevmapper基本操作
- 清远工贸职业技术学校清远大学城网
- 注意职场“十不要”,让你少奋斗30年
- 利用Freesbie制作FreeBSD livecd (2008/1/20)[zt]
- String、String Buffer、StringBuilder区别与比较
- flink的table/sql api的多种写法汇总
- matlab读取文件与写入文件
- semaphore的使用