Hyory Liu
439 字
2 分钟
详细探究if __name__ == '__main__'的意义
感谢BV1T66mYpE7s给的启发。
在静态语言中,每个程序必须要写一个main()函数,用来指代程序的入口。
#include <stdio.h>
int main() { printf(“Hello, World!\n”); return 0; }
但是动态语言就不是这样的了,例如Python,不强制写main()函数,直接0帧起手。
print(‘Hello, World’)
但是这不代表main()函数被移除了,而是以另一种方式存在,一个看起来比较奇怪的判断语句:
if name == ‘main’: print(‘Hello, World’)
我之前也知其然而不知其所以然,只知道这是main()函数的精神遗产,却不知道背后的原理和作用,但经过学习,是时候揭开那神秘的面纱了。
__name__是什么?
__name__其实是一个变量,但这个变量是自带的,不需要额外声明,类似于环境变量。
我们写一个简单的程序,文件名就叫pkg.py吧:
print(name)
运行pkg.py:
main
因此,现在__name__等于’main’。
这是一个不错的起点,我们再创建一个新的.py文件,把pkg.py当模块去导入:
import pkg
运行这个新文件,输出居然有了变化:
pkg
因此,现在__name__等于’pkg’。
可以推测,__name__会随着整个项目的入口文件而改变,如果自己就是入口文件,就返回’main’,如果自己是个模块,就返回模块名(字符串)。
结论是,if name == ‘main’:翻译过来就是如果自己是入口文件,就执行以下代码块,反之亦然。
这有什么用?
对于既是模块,又可能被直接运行的文件,可以将直接运行的代码放在if name == ‘main’:下,这样当模块用的时候,就不会执行直接运行的代码了。
详细探究if __name__ == '__main__'的意义
https://pinpe.top/posts/old/详细探究if-__name__-__main__的意义/