语言学习-python-杂谈-if __name__ == '__main__'如何理解

先了解一下什么是程序入口,:

对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,python是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口

一个 Python 源码文件(后缀为 .py 的文件)除了可以被直接运行外,还可以作为模块(也就是库)被导入(到其他文件)。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

示例:
现在有一个名为first.py的文件:

# -*- coding:utf-8 -*-
def main():
    print("这里是first")

main()

该文件定义了一个main()方法并调用了这个方法,如果直接运行这个文件,它会打印:

这里是first

现在还有另外一个文件叫second.py:

# -*- coding:utf-8 -*-
import first

def main():
    print("这里是second")

main()

这个文件导入了first模块(也就是first.py文件),然后定义了一个main函数,最后调用它,运行这个文件的结果是:

这里是first
这里是second

可以看到,first我只是想导入进来,但实际上并不希望它运行first中的main函数,那么,可以将first.py文件稍作修改:

# -*- coding:utf-8 -*-
def main():
    print("这里是01")


if __name__ == "__main__":
    main()

然后运行second.py文件:

这里是second

可以看到,first中的main函数就没有运行了。

\__name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构(这里在我参考的文章中有介绍,这里不赘述)。

if name == ‘main 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 name 的值。


参考链接:
http://blog.konghy.cn/2017/04/24/python-entry-program/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值