Python里的__name__究竟有啥用

由于在Pyhton里,并没有一个类似c或其他语言的main()函数,所以当我们把运行python程序的命令传递给所谓解释器,如CPython,或更常见的基于BSD开发的交互式解释器IPython。

比如,使用flask框架进行web编程:

export FLASK_APP = test1.py

通常,解释器会按照第一个没有缩近的代码来顺序执行。
不过,在执行前,解释器会定义一些特殊的变量,__name__就是这种变量。

如果被执行文件是自己被直接执行,那么解释器就会将__name__设置为__main__;如果被执行文件是被import的,那么__name__就会被设置为导入的模块名。

通过对__name__ 变量的检查,我们就可以知道被执行文件是否是被导入的。

下面举个例子:
一个test1.py的文件

print("test1 __name__ is %s"   %__name__)
if __name__ == "__main__":
    print("test1 is being run directly")
else:
    print("test1 is being imported")

输出结果如下

(venv) *****microblog/test/test1.py
test1 __name__ is __main__
test1 is being run directly

test2.py的文件

import test1

print("test2 __name__ is %s " %__name__)

输出结果如下

(venv) *****/microblog/test/test2.py
test1 __name__ is test1
test1 is being imported
test2 __name__ is __main__