python 示例:解释__name__ = "__main__"

如何解释python中的 __name__ = "__main__" “Make a script both importable and executable”即让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

__name__ 解释为:如果是存在e于Moudule模块中,就表示是模块的名字;如果是存在于Class类中,就表示该类的名字。

__main__ 解释为:模块第一次被导出(import)后,系统会自动为其创建一个域名空间(namespace);(模块,都有自己的名字)此处的脚本的主模块的名字,始终都叫做__main__。


举例说明__name__ = "__main__" 实际应用中的做用

比如:程序开发中难免划分2部分人员,1部分专门写公共接口,别1部分写业务逻辑并会使用公共接口。那么,A写接口,B写业务逻辑

接口 square.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
[整理]python中的__name__和__main__的意思
Author: baidonglin
"""
def square(x):
        return x * x
print 'this is square.py,result:', square(4)

测试接口:python square.py

结果:this is square.py,result: 16


业务逻辑 mymath.py

#! /usr/bin/env python
# -*- encoding = utf-8 -*-
import square
print 'this is mymath.py, result:', square.square(3)

运行:python mymath.py

结果:this is square.py,result: 16
this is mymath.py, result: 9

那么问题来了,接口是A写的且A不希望自己的调试code被B看到,怎么办?

这个时间__name__="__main__"派上用处了,

square.py 修改成这样

#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
[整理]python中的__name__和__main__的意思
Author: baidonglin
"""
def square(x):
        return x * x

if __name__="__main__":
print 'this is square.py,result:', square(4)

测试接口:python square.py

结果:this is square.py,result: 16

运行:python mymath.py

结果this is mymath.py, result: 9

测试接口时还是会正常看到调试的code输出,但是当我们执行python mymath.py时 会发现A的接口中的调试信息不见了。

(完)


你可能感兴趣的:(python 示例:解释__name__ = "__main__")