【转载】__name__ == "__main__": 你认识我么?

        《笨方法学Python》的习题50中,脚本ex50.py最后一行代码就是 if __name__ == "__main__":

那么,这句代码到底有什么用呢? 莫急莫急,且容我慢慢道来!

        模块是对象,并且所有的模块都有一个内置属性 __name__。 通常它有两种可能的取值,如果

import一个模块,那么模块__name__ 的值通常为导入模块的文件名,不带路径或者文件扩展名。如

果是直接运行模块,在这 种情况下, __name__ 的值将是一个缺省值(默认值)"__main__"。

 

-----------------------------------------------------------------------------------------------------------

假设下面是我们要测试的模块名,叫" t.py "

1 # t.py
2 
3 def print():
4     print "Hello, world!"
5 
6 # 当前脚本的__name__
7 print __name__

输出: 缺省值/默认值

当我们在另外一个脚本中导入 t.py模块时

1 import t
2 
3 class Test(object):
4     
5     def play(self):
6         pass

输出: 模块名(不带后缀)

看到了没,这就是这句代码神奇的地方,当它自己执行自己时,"__name__"( 当前脚本的__name__)显示的

是默认值 __main__, 当它被别人导入时,__name__显示的就是它的名字!

 

------------------------------------------------------------------------------------------------------------

所以说 if __name__ == "__main__":的作用就是——大家先看下下面的示例

 1 # t.py
 2 
 3 # def: (define)定义函数,也就是创建函数
 4 def welcome():
 5     print "Hello, world!"
 6 
 7 # 如果__name__的值不变,调用函数成功
 8 if __name__ == "__main__":
 9     welcome()
10 else:
11     print __name__

输出: 因为自己执行自己时,"__name__"是默认值"__main__", 所以可以执行函数

在另一个脚本导入t.py

1 import t
2 
3 class Test(object):
4 
5     def play(self):
6         pass
7 
8 print t.__name__

输出两个t,一个是从t.py传递过来的,因为t.py被导入的缘故,所以它的__name__到了这里已经

变成它自己的文件名了,这和我们给它打印出来的t.__name__的值是相同的,所以有两个 t  ! ! !

参考园友:  http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html

posted @ 2016-08-31 13:43  坏小孩D_R  阅读(137)  评论(0编辑  收藏  举报