if __name__ == '__main__'的理解

来源:互联网 发布:如何清除mac桌面图标 编辑:程序博客网 时间:2024/05/29 02:24

转载

Python代码和看Python代码时,我们常常可以看到这样的代码:

def main():    ...if __name__ == '__main__':    mian()

name

如果是放在Modules模块中,就表示是模块的名字;

如果是放在Classs类中,就表示类的名字;

main的含义

python代码,是可以直接一行行写出来,然后去运行,更多的Python代码,是写成更加通用的,可以被调用的,可以重复利用的,模块的形式;所以都是写在对应的函数里面的。
**模块第一次被导出(import)后,系统会自动为其创建一个域名空间(namespace);
(模块,都是有自己的名字的)此处的脚本的主模块的名字,始终都叫做main。**

详细解释if name == ‘main‘:

mymath.py

运行结果:

将自己写的有条理可复用的函数,放在一个专门的文件中,被别人调用
模板文件 mymath.py

然后别的python文件__name___and___main__.py中,导入此mymath模块,然后使用其square函数:

结果

可以看到出现了用于在mymath.py中的打印结果
test: square(42) == 1764

明显的,我作为模块调用者是不想看到的

我们希望:
模块mymath.py本身,希望有自己的相关的调试的代码
但是又不希望在被别的,本模块的调用者,所执行到,所看到

所以修改mymath.py

mymath.py本身,自己运行,调试,验证自己的函数square执行的是否正确:

__name___and___main__.py,在import mymath的时候,也不会看到对应的代码执行的结果了:

其中的__main__,就是:
脚本自己去运行的话,对应的模块名,始终叫做__main__,mymath.py中的name就是所在模块的名字

如果被当做一个模块被别人调用的时候,对应的模块mymath.py的模块名,就是mymath,
不是__main__了,
只有在直接引用的时候,在自己的模板中 mymath.py = __main__
作为模板,被程序导入时,模板名就是本身的文件名