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

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

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

引子

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

像我们做事一样,都需要一个起始点,终点存在与否无关紧要。编程也是一样,任何程序都有一个入口,在所谓的静态编译语言中,如 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__'到底是什么?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Design systems

Design systems

Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具