一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用

前言

相信大部分开发者对于“程序入口”这个概念并不陌生。对于很多编程语言来说,程序都必须要有一个入口,比如既保留C语言面向过程思想又有面向对象思想的语言C++等,以及完全面向对象的编程语言Java、C#等,都需要一个main函数作为程序的入口,也就是程序的运行会从main函数开始。Java、C#中都必须要有一个包含main方法的主类作为程序的入口。
python不同,它属于脚本语言,不像编译型语言那样先将程序编译为二进制文件再运行,而是动态逐行解释运行,也就是从脚本第一行开始运行,没有统一的入口 。

正文

.py源文件

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

实例现象

1. 假设现在有一个存储常量圆周率Π的源文件constNum.py,里面只有一个打印常量的方法:
PI=3.1415926535

def main():
    print("Π的值为:",PI)

main()
执行结果:

在这里插入图片描述

2、还有一个是计算圆面积的源文件calculateArea.py,这个文件需要导入上面文件,仅使用里面的常量Π:

from constNum import PI

def calc_round_area(radius):
    return PI*(radius**2)

def main():
    print("this round area is : ",calc_round_area(2))

main()
执行结果:

在这里插入图片描述

上面实例中,计算圆面积的源文件仅导入了常量Π,并没有想使用常量文件中的方法,而程序实际的执行结果可以看到,它把包含Π常量的文件中的方法也执行了。这并不满足需求。(实际需求是仅使用常量Π,不使用打印常量的方法,最终执行结果只打印出面积)。

3、现在,我们对constNum.py文件进行修改,增加“if __name__ == '__main__':”,把自定义的打印方法写在这个方法里面:
PI=3.1415926535

def main():
    print("Π的值为:",PI)

if __name__ == '__main__':
     main()
再次运行计算圆面积源文件,输出结果为:

在这里插入图片描述

增加 “ if name == ‘main’: ”后,可以看到输出结果就是我们实际需求中的样子了。

运行原理

前面说到一个.py文件的作用:①可以直接作为脚本执行;②import到其他的python脚本中被调用执行。
“ if __name__ == '__main__': ”的作用就是控制这两种情况执行代码的过程。在“ if __name__ == '__main__': ” 下的代码只有在第一种情况下(该文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的

每个python模块(.py文件)都包含内置的变量_name_,当模块运行的时候,_name_等于文件 名(包含了后缀.py)。如果import到其他模块中,则_name_等于模块名(不包含后缀.py)。而“_main_”等于当前执行文件的名称(包含了后缀.py)。所以,当模块被直接执行时,__name__ == '__main__ 结果为true,就执行对应的方法;而当模块被import到其他模块时,__name__ == '__main__结果为false,就不调用对应的方法。

猜你喜欢

转载自blog.csdn.net/LZ15932161597/article/details/109379760
今日推荐