知乎回答:https://www.zhihu.com/question/49136398

博客解释:http://blog.konghy.cn/2017/04/24/python-entry-program/

我的见解

如果一个程序被运行时,那么这个程序的__name__= '__main__',也就是会执行if __name__='__main__'

后面的程序。如果此程序是被别的程序调用,那么显然if __name__='__main__'不会成立,也不会执行后面的程序。

他的知乎回答

__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

他的博客

对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

而 Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

举一个例子来说明一下,假设我们有一个 const.py 文件,内容如下:

PI = 3.14def main():print "PI:", PImain()

我们在这个文件里边定义了一些常量,然后又写了一个 main 函数来输出定义的常量,最后运行 main 函数就相当于对定义做一遍人工检查,看看值设置的都对不对。然后我们直接执行该文件(python const.py),输出:

PI: 3.14

现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 const.py 文件中的 PI 变量,那么我们从 const.py 中把 PI 变量导入到 area.py 中:

from const import PIdef calc_round_area(radius):return PI * (radius ** 2)def main():print "round area: ", calc_round_area(2)main()

运行 area.py,输出结果:

PI: 3.14
round area:  12.56

可以看到,const 中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if __name__ == '__main__' 就派上了用场。把 const.py 改一下:

PI = 3.14def main():print "PI:", PIif __name__ == "__main__":main()

然后再运行 area.py,输出如下:

round area:  12.56

再运行下 const.py,输出如下:

PI: 3.14

这才是我们想要的效果。

python3记录(2)— if __name__ == '__main__'相关推荐

  1. Python3基础 if __name__ == '__main__'

    对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 m ...

  2. python使用笔记:if __name__ == ‘__main__‘ 如何理解

    大部分内容来自: 作者:初识CV 链接:https://www.zhihu.com/question/49136398/answer/1654722335 来源:知乎 著作权归作者所有.商业转载请联系 ...

  3. __name__ == '__main__' 到底是什么意思

    __name__ == '__main__'到底是什么意思 相信许多人初学 Python 时,常会在例子程序中看到如下语句: if __name__ == '__main__':foo() # 或其他 ...

  4. python if main_Python:if __name__ == '__main__'

    简介: __name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行. 关于代码if __name__ == ...

  5. 如果__name__ =='__main__':在Python中怎么办?

    In order to understand the details of __name__ variable and the if condition, let us go through a si ...

  6. 【Python】main函数 if __name__=='__main__' 详解

    引言 我们先看下各个编程语言的代码框架输出Hello,World C #include <stdio.h> int main() {printf("Hello, World! \ ...

  7. Python入门--以主程序的方式运行,if __name__==‘__main__‘

    #以主程序的形式运行 #在每个模块的定义中都包括一个记录模块名称的变量__name__ #程序可以检查该变量,以确定它们在哪个模块中执行 #如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的 ...

  8. Python3记录--个人常用函数及资源(持续更新)

    文章目录 一.引入 二.列举 2.1清洗字符串 2.2字节格式化 2.3UA随机生成 2.4停用词 2.5正则匹配汉字 2.6输出彩色字体 2.7判断关键字是否在文本中出现 2.8谷歌翻译语言表 2. ...

  9. python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')

    二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...

最新文章

  1. Ponemon:2018年度数据泄露成本分析报告
  2. 数据查询分页 获取总数时间太长_干货:SQL Server 查询语句
  3. Shell 脚本基础学习 (四)
  4. 数据结构——二叉树的最长路径问题
  5. 服务降级的概念及应用手段
  6. 多模光纤收发器的应用领域及适用领域
  7. java传入数据库生成柱状图_Java读取数据库数据生成柱状图
  8. 2017-2018-2 1723《程序设计与数据结构》第三周作业 实验一 总结
  9. HALCON 18.11 Progress 发布说明
  10. 面试题:Redis 40 道
  11. php实现pdhf2加密,搞了一天半了,可恶的加密代码解决方案
  12. 常用计算机控制芯片有哪些,电脑基本芯片的认识的常用知识介绍
  13. 梦幻西游 python.dll_GitHub - 10508zhl/mhxy: tensorflow实践:梦幻西游人物弹窗识别
  14. Android中的MVC详解
  15. 二手车电商三国杀,广告大战究竟该不该打?
  16. 倍福NC轴编码器Enc parameters释义
  17. IP RAN和PTN的区别——TFN TT60 综合网络测试仪
  18. ubuntu配置nvidia显卡性能
  19. WebBrowser的Cookie操作之流量刷新机
  20. 电信标清和高清ITV需要几M的宽带才可以看?

热门文章

  1. 游戏理论研究四:RPG游戏
  2. Sharepoint定制的时候应该注意的事项
  3. bzoj 1026: [SCOI2009]windy数
  4. Python 了解 bytes 与 str 的区别
  5. java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...
  6. java deployment_deployment简略介绍
  7. redis 公网 安全_最安全redis公网访问
  8. 20万数据 sql 快还是 java快?_基于SpringBoot2.0开发的,轻量级的,前后分离Java开发平台...
  9. 显示2位小数 python3_自动化常用语言python,版本3和2有何变化?
  10. parallels网络初始化失败_出神入化:特斯拉AI主管、李飞飞高徒Karpathy的33个神经网络炼丹技巧...