python3记录(2)— if __name__ == '__main__'
知乎回答: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__'相关推荐
- Python3基础 if __name__ == '__main__'
对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 m ...
- python使用笔记:if __name__ == ‘__main__‘ 如何理解
大部分内容来自: 作者:初识CV 链接:https://www.zhihu.com/question/49136398/answer/1654722335 来源:知乎 著作权归作者所有.商业转载请联系 ...
- __name__ == '__main__' 到底是什么意思
__name__ == '__main__'到底是什么意思 相信许多人初学 Python 时,常会在例子程序中看到如下语句: if __name__ == '__main__':foo() # 或其他 ...
- python if main_Python:if __name__ == '__main__'
简介: __name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行. 关于代码if __name__ == ...
- 如果__name__ =='__main__':在Python中怎么办?
In order to understand the details of __name__ variable and the if condition, let us go through a si ...
- 【Python】main函数 if __name__=='__main__' 详解
引言 我们先看下各个编程语言的代码框架输出Hello,World C #include <stdio.h> int main() {printf("Hello, World! \ ...
- Python入门--以主程序的方式运行,if __name__==‘__main__‘
#以主程序的形式运行 #在每个模块的定义中都包括一个记录模块名称的变量__name__ #程序可以检查该变量,以确定它们在哪个模块中执行 #如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的 ...
- Python3记录--个人常用函数及资源(持续更新)
文章目录 一.引入 二.列举 2.1清洗字符串 2.2字节格式化 2.3UA随机生成 2.4停用词 2.5正则匹配汉字 2.6输出彩色字体 2.7判断关键字是否在文本中出现 2.8谷歌翻译语言表 2. ...
- python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')
二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...
最新文章
- Ponemon:2018年度数据泄露成本分析报告
- 数据查询分页 获取总数时间太长_干货:SQL Server 查询语句
- Shell 脚本基础学习 (四)
- 数据结构——二叉树的最长路径问题
- 服务降级的概念及应用手段
- 多模光纤收发器的应用领域及适用领域
- java传入数据库生成柱状图_Java读取数据库数据生成柱状图
- 2017-2018-2 1723《程序设计与数据结构》第三周作业 实验一 总结
- HALCON 18.11 Progress 发布说明
- 面试题:Redis 40 道
- php实现pdhf2加密,搞了一天半了,可恶的加密代码解决方案
- 常用计算机控制芯片有哪些,电脑基本芯片的认识的常用知识介绍
- 梦幻西游 python.dll_GitHub - 10508zhl/mhxy: tensorflow实践:梦幻西游人物弹窗识别
- Android中的MVC详解
- 二手车电商三国杀,广告大战究竟该不该打?
- 倍福NC轴编码器Enc parameters释义
- IP RAN和PTN的区别——TFN TT60 综合网络测试仪
- ubuntu配置nvidia显卡性能
- WebBrowser的Cookie操作之流量刷新机
- 电信标清和高清ITV需要几M的宽带才可以看?
热门文章
- 游戏理论研究四:RPG游戏
- Sharepoint定制的时候应该注意的事项
- bzoj 1026: [SCOI2009]windy数
- Python 了解 bytes 与 str 的区别
- java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...
- java deployment_deployment简略介绍
- redis 公网 安全_最安全redis公网访问
- 20万数据 sql 快还是 java快?_基于SpringBoot2.0开发的,轻量级的,前后分离Java开发平台...
- 显示2位小数 python3_自动化常用语言python,版本3和2有何变化?
- parallels网络初始化失败_出神入化:特斯拉AI主管、李飞飞高徒Karpathy的33个神经网络炼丹技巧...