终于要开始用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__:该如何理解相关推荐

  1. 浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  2. python 中__name__ = '__main__' 的作用

    学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...

  3. python中main的作用_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  4. Python中浅拷贝和深拷贝的理解与研究

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  5. Python中浅拷贝和深拷贝的理解与研究 1

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  6. python中的元类_理解python中的元类

    一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...

  7. 如何理解python中的函数_如何理解“python中函数是一等公民”?

    python.js.scala等支持函数式编程的语言中,是如何体现"函数是一等公民(first class)"的?而在c/c++.java等静态语言中的一等公民又是什么?如何体现的 ...

  8. python中*args和**kwargs的理解,Python中的*args和**kwargs的理解与用法

    一.简述 1.*args和**kwargs 这两个是python中方法的可变参数. 2.*args表示任何多个无名参数,它是一个tuple: 3.**kwargs表示关键字参数,它是一个dict.并且 ...

  9. python中绝对路径的区别,理解Python中的绝对路径和相对路径

    本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...

最新文章

  1. 【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
  2. 基于matlab的脑瘤mr图像处理_基于Matlab GUI的医学图像处理课程虚拟实验平台设计...
  3. Php无刷新修改url,history 实现无刷新更改url和页面内容
  4. 组态王c语言编程实例,组态王命令语言程序.doc
  5. mysql 刘道成视频教程 第4-8课 --- 数据类型
  6. PyTorch实战福利从入门到精通之六——线性回归
  7. html 中写注释吗,html怎么注释?
  8. 天猫行业资深店长认证
  9. vue PC端项目页面做rem布局(大屏展示)
  10. hexo next主题配置
  11. [论文] 主动学习直推学习测试集验证集
  12. 《李航 统计学习方法》学习笔记——第八章提升方法
  13. 短视频风口持续 今日头条再投10亿补贴火山小视频
  14. webservice:com.sun.xml.internal.ws.server.ServerRtException: [failed to localize]
  15. 常识 | drm kms 详解
  16. 如何批量用扫描仪扫描照片_如何用手机扫描旧照片
  17. ViT强势应用 | V2X基于ViT提出了一个具有V2X通信的强大协作感知框架
  18. Excel表格中多个文本内容快速合并到一个单元格内
  19. 温故知新(九一)什么是抽象语法树,有哪些用途
  20. Java split()用法,使用特殊字符要注意了

热门文章

  1. 【PHP+JS】uploadify3.2 和 Ueditor 修改上传文件 大小!!
  2. 2022-2028年中国K酸行业发展现状及前瞻分析报告
  3. matlab 填充 多边形,algorithm – 如何在MATLAB中从无序边数据创建填充多边形?
  4. Jzoj4747 被粉碎的线段树
  5. Mybatis常用查找的总结
  6. SQL Server数据类型
  7. Java学习-jsp内置对象Session
  8. J2EE基础之JSP
  9. [转]Android横竖屏切换解决方案
  10. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现