python 有关 if __name__ == ‘__main__‘ 的正确理解

写此文章的初衷在于笔者碰到一道题目如下:

“假设有Python程序文件a.py,其代码如下:

def main():
    if __name__ == '__main__':
        print(1)
    else:
        print(2)
main()

若将改程序文件直接运行结果为(),作为模块导入时得到结果为()”

在这里话不多说,直接跑一跑看答案。

python 有关 if __name__ == ‘__main__‘ 的正确理解_第1张图片

python 有关 if __name__ == ‘__main__‘ 的正确理解_第2张图片

可以看到结果分别是1和2。

那么接下来解释为什么是这样一个结果,首先需要说一个关于程序入口的问题。而if __name__ == '__main__'便可以理解为Python 模拟的程序入口,在作为脚本执行时,执行if __name__ == '__main__'下的代码,而作为模块被导入时,被导入的模块中的if __name__ == '__main__'下的代码则不会被执行。

说白了就是如果代码是直接执行的则执行if __name__ == '__main__'下的代码,如果代码时被导入的则不执行。

接下来,便是关于if __name__ == '__main__'中的  “ __name__ ”到底是什么,应该怎么理解。其实,__name__ 是一个内置变量,用于表示当前模块的名字,当代码作为脚本执行时,其中的__name__是__main__,当代码作为模块导入时,其中的__name__是被导入的文件名。

举例如下:

python 有关 if __name__ == ‘__main__‘ 的正确理解_第3张图片

 

python 有关 if __name__ == ‘__main__‘ 的正确理解_第4张图片

python 有关 if __name__ == ‘__main__‘ 的正确理解_第5张图片

 

a,b,c三个python文件,a,c分别是作为脚本执行,在b中将a,c 分别导入执行,可以清晰的看到在作为脚本执行时,__name__是__main__,作为模块导入时,其中的__name__是被导入的文件名。

 

故此,对文章开头提到的题目便可以很清晰的得到结果,第一次作为脚本执行,__name__是__main__,故而执行print(1),作为模块导入,__name__是a,故而执行print(2).

以上!

有关程序入口可以参考if __name__ == '__main__' 如何正确理解 - 姚红 - 博客园 (cnblogs.com)

比较详细。

你可能感兴趣的:(python,开发语言,后端)