if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;
经常在Python脚本的最后看到有这样的语句:
if __name__ == '__main__': main()
那么这是什么意思呢?
__name__是什么?
__name__是当前模块(脚本文件)的一个属性,当直接运行当前脚本时,__name__的值是'__main__'。
而当当前模块(脚本文件)被其他脚本import时,它的__name__属性的值为模块名。
举个例子:
脚本文件1:print_array.py
脚本文件1定义了一个名为my_fun()的函数。
#!/usr/bin/env python#-*- coding:utf-8 -*-import numpy as npdef my_fun(): n = input("Input a single positive odd integer greater than 2: ") while True: try: n = int(n) if (int(n) % 2 == 0 or int(n) < 2): n = input("Oops, you have given a WRONG number! Please input a single positive odd integer greater than 2: ") else: break except: n = input("Oops, you have given a WRONG number! Please input a single positive odd integer greater than 2: ") print ("n = %s" %n) a = np.zeros((n, n), dtype=int) m = n // 2 a[:, m] = 1 a[m, :] = 1 print (a)def main(): my_fun()if __name__ == '__main__': main()
脚本文件2:main_test.py
脚本文件2对脚本文件1进行了调用。
#!/usr/bin/env python#-*- coding:utf-8 -*-import print_arrayprint (print_array.__name__)print (__name__)
开始测试:
第一步:直接执行print_array.py,my_fun()函数被运行,结果如下:
第二步:直接执行main_test.py,my_fun()函数没有被运行,结果如下:
由此可以看出,print_array.py中增加了对__name__属性的判断后,在被main_test.py调用时,不会运行my_fun()函数。
同时,在执行main_test.py时,pring_array的__name__属性的值为'print_array',而main_test.py本身的__name__属性值为'__main__'。
第三步:对print_array.py作一些修改,去掉对__name__属性的判断,改为直接运行my_fun()函数:
第四步:再次执行main_test.py,结果如下:
可以看到在import print_array时,print_array.py中的my_fun()函数同时被运行了。
总结
通过以上几个步骤,可以看出if __name__ == '__main__' 在脚本中起到的作用。
模块作为脚本独立执行时,__name__ == '__main__'的结果为True,if中的语句会被运行。
模块作为被其他脚本调用的子模块时,脚本文件中的__name__ == '__main__'的结果为False,if中的语句不会被运行。
因此,如果模块不存在被调用的场景,这句话可以省略。如果存在被调用的场景,那么是必不可少的。
if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;相关推荐
- 终于搞懂了Python模块之间的相互引用问题
摘要:详细讲解了相对路径和绝对路径的引用方法. 在某次运行过程中出现了如下两个报错: 报错1: ModuleNotFoundError: No module named '__main__.src_t ...
- IntelliJ IDEA 部署 Web 项目,终于搞懂了!
IntelliJ IDEA 部署 Web 项目,终于搞懂了! 这篇牛逼:Java 程序员必备的 Intellij IDEA 插件 IDEA 中最重要的各种设置项,就是这个 Project Struct ...
- 电压和电流反馈判别及例子,绝对让你通透,其实也没有那么难,一次就看懂!从此终于搞懂了电压反馈和电流反馈!
电压和电流反馈判别及例子,其实也没有那么难,绝对让你通透,一次就看懂!从此终于搞懂了电压反馈和电流反馈! 一个简单粗暴的判断方法: 先看反馈是否直接连到Uo输出端(若不是直接从输出端引出,则为电流反馈 ...
- if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;
生信必备的Python入门到进阶干货,已整理在菜单栏,敬请查阅 在写Python脚本时,总会遇到 if __name__ == '__main__',生信背景的我们有必要了解这个是啥. 举个例子,新建 ...
- 关于子网掩码怎么计算!!!!我终于搞懂了!!!!
今天终于搞明白了子网掩码啥的是啥意思了!!!我写几个就我自己看懂的! 1.首先ip呢都是XXX.XXX.XXX.XXX这样组成的然后一般来说就是255.255.255.255,对应的二进制文件就是11 ...
- HTTPS 终于搞懂了 !
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- 蚊子凭啥只咬你?科学家用 5 年造出一批“脑子发光”的蚊子,终于搞懂背后机制
为了发篇 Nature,他们一天用自己喂了 3000 只蚊子?! 听起来有些不可思议,但却是普林斯顿大学一群研究人员在做的事情 -- 他们试图找出这些蚊子专门吸人血的原因. 我们都知道,有不少蚊子会吸 ...
- cad布局怎么用_终于搞懂CAD的布局是个什么玩意儿了!原来布局要这样用
很多初学的小伙伴都没搞懂CAD布局是怎么一回事儿,其实也没你想像的那么难.今天小编就来跟大家说一说,关于如何新建布局和比例设置等内容,希望对大家有所帮助. 一.布局视口如何定义 1.命令 模型定义布局 ...
- 蚊子凭啥只咬你?他们用5年造出一批“脑子发光”的蚊子,终于搞懂背后机制丨Nature...
明敏 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 为了发篇Nature,他们一天用自己喂了3000只蚊子?! 听起来有些不可思议,但却是普林斯顿大学一群研究人员在做的事情-- 他们试图找出这 ...
最新文章
- 比特币现金与比特币呈竞争关系 分析表示加密货币之间的竞争不是坏事
- 计算机网络那些事~(一)
- 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
- beta分布_浅谈脑电的beta频段振荡
- callablestatement.setstring会不会将字符串trim_Java String:重要到别人只能当老二的字符串类
- 好端端的程序员,咋就成了新生代农民工!
- Django思维导图
- Java高级语法笔记-接口(interface)
- synchronized 修饰static方法
- IDEA for win 常用快捷键
- 这么多人,AI怎么知道你说的是哪个? | 李飞飞团队CVPR论文+代码
- 阿里云祝顺民:因云而生的云原生网络
- 联想IBM服务器装系统教程,联想thinkpad系统安装攻略 每一个步骤都有
- 非 ROOT 安卓内录
- MATLAB鲁棒控制器实现
- 基于multisim14的函数信号发生器仿真
- 盘点城市智慧水务领域的英文期刊
- ARMv8-A编程指导之Caches(1)
- 升级mongodb时出现The data files need to be fully upgraded
- python实现选择题自动答题_答题辅助python代码实现
热门文章
- 1.VMware安装3个ubuntu14.05
- MSB6006: “cmd.exe”已退出,代码为 3.
- mfc中ado上传image到sql数据库
- Java 包(package)
- matlab调用opencv的函数
- OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
- Hadoop教程(一):简介、大数据解决方案、介绍快速入门
- IO测试工具之fio详解
- 使用keepalived监控tomcat 达到双机热备
- Android我的便签-----SQLite的使用方法