Python中if__name__==__main__:该如何理解
终于要开始用Python了,直接上手……
程序入口
对于很多编程语言来说,程序都必须要有一个入口,比如 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
这才是我们想要的效果。
if __name__ == '__main__'
就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__
的值。
Python中if__name__==__main__:该如何理解相关推荐
- 浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- python 中__name__ = '__main__' 的作用
学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...
- python中main的作用_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- Python中浅拷贝和深拷贝的理解与研究 1
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- python中的元类_理解python中的元类
一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...
- 如何理解python中的函数_如何理解“python中函数是一等公民”?
python.js.scala等支持函数式编程的语言中,是如何体现"函数是一等公民(first class)"的?而在c/c++.java等静态语言中的一等公民又是什么?如何体现的 ...
- python中*args和**kwargs的理解,Python中的*args和**kwargs的理解与用法
一.简述 1.*args和**kwargs 这两个是python中方法的可变参数. 2.*args表示任何多个无名参数,它是一个tuple: 3.**kwargs表示关键字参数,它是一个dict.并且 ...
- python中绝对路径的区别,理解Python中的绝对路径和相对路径
本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...
最新文章
- 【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
- 基于matlab的脑瘤mr图像处理_基于Matlab GUI的医学图像处理课程虚拟实验平台设计...
- Php无刷新修改url,history 实现无刷新更改url和页面内容
- 组态王c语言编程实例,组态王命令语言程序.doc
- mysql 刘道成视频教程 第4-8课 --- 数据类型
- PyTorch实战福利从入门到精通之六——线性回归
- html 中写注释吗,html怎么注释?
- 天猫行业资深店长认证
- vue PC端项目页面做rem布局(大屏展示)
- hexo next主题配置
- [论文] 主动学习直推学习测试集验证集
- 《李航 统计学习方法》学习笔记——第八章提升方法
- 短视频风口持续 今日头条再投10亿补贴火山小视频
- webservice:com.sun.xml.internal.ws.server.ServerRtException: [failed to localize]
- 常识 | drm kms 详解
- 如何批量用扫描仪扫描照片_如何用手机扫描旧照片
- ViT强势应用 | V2X基于ViT提出了一个具有V2X通信的强大协作感知框架
- Excel表格中多个文本内容快速合并到一个单元格内
- 温故知新(九一)什么是抽象语法树,有哪些用途
- Java split()用法,使用特殊字符要注意了