Python中__name__ == __main__总结
一、语义解释
1.__name__
- 是python内置属性,是系统全局变量!每一个py文件都有一个属于自己的__name__
- 如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(模块名)
- 如果py文件直接运行时,那么__name__默认等于字符串”__main__“
举个例子就是:假如你名字是张三,在朋友眼中,你是张三(__name__ == '张三');在你自己看来,你就是你自己(__name__ == '__main__')
2.”__main__“:
实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西
3.__name__ == "__main__"
- 新建一个ma_name.py文件,作为模块文件:
1 def print_name(): 2 print("my_name.py__name__:",__name__) 3 4 def print_number(): 5 print("1234567") 6 7 if __name__ == "__main__": 8 print_name()
- 新建一个python_main.py文件,作为启动文件:
1 import ma_name 2 3 def print_name(): 4 ma_name.print_number() ###只有这样模块化引用时才会输出 5 ma_name.print_name() ###ma_name.py作为导入模块,该模块__name__等于文件名(模块名) 6 print("pthon_main.py __name__:",__name__) 7 8 if __name__ == "__main__": ###py文件直接运行时,__name__默认等于字符串"__main__" 9 print_name() ###py文件作为模块被导入时(import),__name__就是该py文件的文件名 10 11 #输出结果 12 1234567 13 my_name.py__name__: ma_name 14 pthon_main.py __name__: __main__
二、作用是什么(why)
1.作为启动文件的main函数入口
2.用于代码调试过程,main函数内if语句体(body)的内容也只有在对应文件下(自己)才会执行,而这一特点在python设计模块(module)时带来极大的便利。
当我们设计好一个模块后,我们想运行一些测试代码,而这些测试代码我们不希望在别的文件import本模块时引入,造成干扰。
解决方案就是我们把测试代码放入if __name__ == '__main__'
之后,这样,只有在运行测试本模块(本文件)时,测试代码才会执行。
如果想执行其他模块的if内容,需要引用if内的确定函数才行,比如ma_name.print_number()