if __name__ == '__main__'到底是什么?

栏目: IT技术 · 发布时间: 4年前

内容简介:要搞清楚这个问题,可以先听一个故事~~~像我们做事一样,都需要一个起始点,终点存在与否无关紧要。编程也是一样,任何程序都有一个入口,在所谓的静态编译语言中,如

引子

要搞清楚这个问题,可以先听一个故事~~~

像我们做事一样,都需要一个起始点,终点存在与否无关紧要。编程也是一样,任何程序都有一个入口,在所谓的静态编译语言中,如 Java 的入口是一个名字叫做 Main 的类,所有的程序都必须从这里开始运行,因此读别人的 Java 代码很方便,直接找入口就可以了。而 Python 这种动态解释型的语言不一样,他的入口就是程序的第一行,从 代码开始书写 的地方一直读到 程序末尾 ,这就很有意思了,为了 程序员 读别人的代码更方便 ,也为了 让程序输出更为简洁 ,约定俗成了一种规范,即模仿 Java ,使用 if __name__ == '__main__' 给程序设定一个入口。

if __name__ == '__main__' 是为了使 Python 更优雅而 约定俗成 的一个 程序入口

但是,这个程序入口和 Java 略有不同:

  • Java 强制程序所有的输入输出、流程控制等都在 Main 类里面;
  • Python 只是使用 if __name__ == '__main__' 保证不是同一个模块的输入输出、流程控制等不相互影响。

分步骤详细举例说明

什么是 __name__

新建一个 Python 程序, a.py

# a.py


print('a.py':__name__)

输出:

a.py:__main__

再新建一个 Python 程序, b.py

# b.py
import a


# 当前程序包的名字
print('b.py':__name__)
# b.py程序的名字
print('a.py':a.__name__)

运行 b.py ,输出:

b.py:__main__
a.py:a

小结

__name__ 是程序的名称,当前运行程序的 __name____main__ ,非当前运行程序的名称为程序的模块名称,即自定义值。

如果程序里面含有 程序入口 ,那么程序如何执行呢?

Python 只是使用 if __name__ == '__main__' 保证不是同一个模块的输入输出、流程控制等不相互影响。 如何解释呢?

# a.py

print('01:首先执行这一行代码')

if __name__ == '__main__':
    print('02:然后执行这一行代码')

运行 a.py ,输出:

01:首先执行这一行代码
02:然后执行这一行代码

以上说明, python 是顺序执行的,这个所谓的 程序入口不能改变执行顺序

如果程序长这样呢?

# a.py

print('a-01:这是a程序的输出')

--------------------------

# b.py
import a

if __name__ == '__main__':
    print('b-01:这是b程序的输出')

运行 b.py ,输出:

a-01:这是a程序的输出
b-01:这是b程序的输出

可见,又一次证明程序是顺序执行的,而且 程序入口 并没有起作用。

那么,这个 程序入口 的作用是什么呢?

# a.py

if __name__ == '__main__':
	print('a-01:这是a程序的输出')

--------------------------

# b.py
import a

if __name__ == '__main__':
    print('b-01:这是b程序的输出')

运行 b.py ,输出:

b-01:这是b程序的输出

这次成功阻止了 a.py 程序的输出,可以轻松理解: Python 只是使用 if __name__ == '__main__' 保证不是同一个模块的输入输出、流程控制等不相互影响。

小结

为了更简洁优雅的使用 Pyhton 十分建议 将每个模块的执行逻辑和输入输出都放在程序入口里面 ,这样在调用时 不会污染程序上下文执行环境


以上所述就是小编给大家介绍的《if __name__ == '__main__'到底是什么?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ACM国际大学生程序设计竞赛题解

ACM国际大学生程序设计竞赛题解

赵端阳//袁鹤 / 电子工业 / 2010-7 / 39.00元

随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(2)》根据浙江大学在线题库的部分题目,经过分类、筛选、汇编,并进行了解答(个别特别简单或者特别复杂的题目未选择),比较详细地分析和深入浅出地讲解了解题的方法和用到的算法。题目的类型包括基础编程、模拟、字符串处理、搜索、动态规划、回溯、图论、几何和数学题。 ......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具