经常在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;相关推荐

  1. 终于搞懂了Python模块之间的相互引用问题

    摘要:详细讲解了相对路径和绝对路径的引用方法. 在某次运行过程中出现了如下两个报错: 报错1: ModuleNotFoundError: No module named '__main__.src_t ...

  2. IntelliJ IDEA 部署 Web 项目,终于搞懂了!

    IntelliJ IDEA 部署 Web 项目,终于搞懂了! 这篇牛逼:Java 程序员必备的 Intellij IDEA 插件 IDEA 中最重要的各种设置项,就是这个 Project Struct ...

  3. 电压和电流反馈判别及例子,绝对让你通透,其实也没有那么难,一次就看懂!从此终于搞懂了电压反馈和电流反馈!

    电压和电流反馈判别及例子,其实也没有那么难,绝对让你通透,一次就看懂!从此终于搞懂了电压反馈和电流反馈! 一个简单粗暴的判断方法: 先看反馈是否直接连到Uo输出端(若不是直接从输出端引出,则为电流反馈 ...

  4. if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;

    生信必备的Python入门到进阶干货,已整理在菜单栏,敬请查阅 在写Python脚本时,总会遇到 if __name__ == '__main__',生信背景的我们有必要了解这个是啥. 举个例子,新建 ...

  5. 关于子网掩码怎么计算!!!!我终于搞懂了!!!!

    今天终于搞明白了子网掩码啥的是啥意思了!!!我写几个就我自己看懂的! 1.首先ip呢都是XXX.XXX.XXX.XXX这样组成的然后一般来说就是255.255.255.255,对应的二进制文件就是11 ...

  6. HTTPS 终于搞懂了 !

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  7. 蚊子凭啥只咬你?科学家用 5 年造出一批“脑子发光”的蚊子,终于搞懂背后机制

    为了发篇 Nature,他们一天用自己喂了 3000 只蚊子?! 听起来有些不可思议,但却是普林斯顿大学一群研究人员在做的事情 -- 他们试图找出这些蚊子专门吸人血的原因. 我们都知道,有不少蚊子会吸 ...

  8. cad布局怎么用_终于搞懂CAD的布局是个什么玩意儿了!原来布局要这样用

    很多初学的小伙伴都没搞懂CAD布局是怎么一回事儿,其实也没你想像的那么难.今天小编就来跟大家说一说,关于如何新建布局和比例设置等内容,希望对大家有所帮助. 一.布局视口如何定义 1.命令 模型定义布局 ...

  9. 蚊子凭啥只咬你?他们用5年造出一批“脑子发光”的蚊子,终于搞懂背后机制丨Nature...

    明敏 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 为了发篇Nature,他们一天用自己喂了3000只蚊子?! 听起来有些不可思议,但却是普林斯顿大学一群研究人员在做的事情-- 他们试图找出这 ...

最新文章

  1. 比特币现金与比特币呈竞争关系 分析表示加密货币之间的竞争不是坏事
  2. 计算机网络那些事~(一)
  3. 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
  4. beta分布_浅谈脑电的beta频段振荡
  5. callablestatement.setstring会不会将字符串trim_Java String:重要到别人只能当老二的字符串类
  6. 好端端的程序员,咋就成了新生代农民工!
  7. Django思维导图
  8. Java高级语法笔记-接口(interface)
  9. synchronized 修饰static方法
  10. IDEA for win 常用快捷键
  11. 这么多人,AI怎么知道你说的是哪个? | 李飞飞团队CVPR论文+代码
  12. 阿里云祝顺民:因云而生的云原生网络
  13. 联想IBM服务器装系统教程,联想thinkpad系统安装攻略 每一个步骤都有
  14. 非 ROOT 安卓内录
  15. MATLAB鲁棒控制器实现
  16. 基于multisim14的函数信号发生器仿真
  17. 盘点城市智慧水务领域的英文期刊
  18. ARMv8-A编程指导之Caches(1)
  19. 升级mongodb时出现The data files need to be fully upgraded
  20. python实现选择题自动答题_答题辅助python代码实现

热门文章

  1. 1.VMware安装3个ubuntu14.05
  2. MSB6006: “cmd.exe”已退出,代码为 3.
  3. mfc中ado上传image到sql数据库
  4. Java 包(package)
  5. matlab调用opencv的函数
  6. OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
  7. Hadoop教程(一):简介、大数据解决方案、介绍快速入门
  8. IO测试工具之fio详解
  9. 使用keepalived监控tomcat 达到双机热备
  10. Android我的便签-----SQLite的使用方法