【转载】__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