Python|if __name__ == "__main__" 的意义()

python的文件都是以.py为后缀名的。
这个python文件可以被作为脚本直接执行,也可以被导入其他模块中进行调用。
而 if __name__ == "__main__" 存在的意义即是为了判断当前运行的文件是直接执行的,还是被导入的模块。
举例说明:
建立一个python文件:test.py 里面的代码为:
-----------------------------------------
print 'who are you'
if __name__ == "__main__":
print 'who am i'
-------------------------运行结果为:
who are you
who am i
------------
在同目录下建立一个python文件: testone.py 里面代码如下:
------------------------------------------------------
import test
-------------运行结果如下:
who are you
------------
分析:
"__name__"是两个文件 test.py 和 testone.py的内置变量,当运行的时候它等于当前文件名
"__main__"可以看成是两个文件的名字即:test 和 testone,
当第一个文件直接运行的时候对 if __name__ == "__main__" 进行了判断,为真,即相等,所以继续向下执行。

(这时候的"__name__"等于'test.py',包含后缀名,如果import到其他模块中,则testone.py中的"__name__"等于模块名称即等于test(不包含后缀.py),
而“__main__”等于当前执行文件的名称(包含了后缀.py),即在test.py的文件中,"__main__"等于test.py,而在testone.py的文件中,"__main__"等于testone.py)

所以当第一文件test.py运行的时候就相当于这样的判断:test.py == test.py 为真
当第二个文件testone.py运行的时候就相当于这样的判断:test == testone.py 为假
所以会导致最终的结果不一样。

同时它的作用就就显现出来了:
模块既可以导入到别的模块中用,另外该模块自己也可执行,最终实现:
既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
例如下面的代码:
文件名称为:module.py
----------------------
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()
当执行这个文件的时候,其结果为 ”we are in __main__“,说明我们的if语句中的内容被执行了,成功调用了main()函数
------------------------------------------------------------------------------------------
当在其他文件调用这个文件模块的的时候,并调用一次main()函数的时候:
import module
main()
其运行的结果为:we are in module
也就是说:当执行main()函数的时候,因为另外的文件其本身的"__name__"等于module,所以结果为we are in module,而又因为
module不等于另一个文件的名称即:.py的文件 所以后续没有执行继续调用。
--------------------------------------------------------------------
这样就相当明晰了:即main()在module.py文件的时候可以自己运行:
当然这是一体的:
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()
---------------------------加入第三第四行只是为了可以自己运行的情况下被作为模块导入其他文件使用。这样互不影响。

参考文献:http://www.cnblogs.com/kex1n/p/5975575.html

    推荐阅读