python中的if__name__== "__main__"
防止函数或者类在被导入的时候执行两次,
因为import一个函数的时候,它会把这个函数执行一次。
1、# vim if__name_0#_*_coding:utf8_*_def foo(): print "in foo"print __name__foo()# python if__name_0__main__in foo>>> import if__name_0if__name_0in foo# python直接执行if__name_0 和 import if__name_0 后的输出结果不一样,# 是因为python 直接执行print __name__ 输出的结果是 __main__ , 而import# 导入执行__name__ 输出的结果是脚本的名字。2、# vim if__name_1#_*_coding:utf8_*_import if__name_0if__name_0.foo()# python if__name_1if__name_0in fooin foopython执行if__name_1这个脚本后,会先import if__name_0 ,根据上面已经得出的结果,可以知道import if__name_0 输出的是: if__name_0in foo然后脚本会再执行函数if__name_0.foo(),输出的结果是:in foo所以最终输出的结果是:if__name_0in fooin foo>>> import if__name_1if__namein fooin foo3、# vim if__name_2#_*_coding:utf8_*_def foo(): print "in foo"print __name__if __name__ == "__main__": foo()# python if__name_2__main__in foopython执行脚本的时候,print __name__输出的结果是__main__ , __name__ == "__main__" ,所以继续执行下面的函数,输出: in foo , 所以最终输出结果为 :__main__in foo>>> import if__name_2if__name_2import if__name_2的时候,print __name__ = if__name2 ,不等于__main__ , 所以后面的函数就不执行了,最终输出的结果是if__name_24、# vim if__name_3#_*_coding:utf8_*_import if__name_2if__name_2.foo()# python if__name_3if_name_2in fooimport if__name_2 根据上面得出的结果,import if__name_2输出的是:if__name_2函数if__name_2.foo()输出的结果是:in foo , 所以最终输出的结果是:if_name_2in foo>>> import if__name_3if__name_2in foo
小结:
python 直接执行print __name__ 输出的结果是 __main__
import 导入一个函数,print __name__输出的是这个函数的脚本的名字
for example:
小明.py
朋友眼中你是小明(__name__ == "小明"),
你自己眼中的你是你自己(__name__ == "__main__")
朋友去调你去帮他写程序(import 小明,这时你在朋友眼中:__name__ == '小明')
小明自己写程序,直接运行小明.py,__name__ == "__main__"