python中的if__name__=='__main__'的作用

一个python文件通常有两种用法:

1.作为脚本直接执行

2.import到其他的python脚本中被调用(模块重用)执行

if__name__=='__main__'的作用就是控制这两种情况执行代码的过程

在if__name__=='__main__'之后的代码只有在第1种情况才会被执行(作为脚本直接执行),而 import 到其他脚本中是不会被执行的

直接执行:

 

 

直接执行 test.py,结果如下图,可以成功 print 两行字符串。即,if __name__=="__main__": 语句之前和之后的代码都被执行。

 

  • import 执行

然后在同一文件夹新建名称为 import_test.py 的脚本,输入如下代码:

 

 

只输出了第一行字符串。即,if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

if __name__ == '__main__':的运行原理

每个python模块(python文件,也就是此处的 test.py 和 import_test.py)都包含内置的变量 __name__,当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。

 “__main__” 始终指当前执行模块的名称(包含后缀.py)。进而当模块被直接执行,__name__ == 'main' 结果为真

 

 

 

对于if __name__ == ‘__main__’:的理解

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

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

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

由于经常会在文件中调用其他的文件作为模块引入,所以这相当于是用于区分当前文件是作为调用其他文件、模块的文件,还是被其他文件所调用的文件。这个__name__是一个属性,是属于这个文件的属性,这个属性值会随着该文件的状态发生改变。这个状态指的是该文件是主文件还是被当作模块引入其他的文件中。所以当__name__值为‘__main__’时,表示当前文件是作为主文件的,那么使用if __name__ == ‘__main__’就会执行其中的语句。而如果当前文件是被其他文件所调用时,__name__的值是该文件名,所以此if语句块则不会被执行。

所以利用这个__name__属性,可以很好地实现,该文件本身能运行,也能被当作模块引入其他文件中,并且不发生冲突矛盾。

 



 

https://blog.csdn.net/heqiang525/article/details/89879056

 

posted @ 2021-07-09 15:31  wanlipiao1985  阅读(1216)  评论(0)    收藏  举报