特殊变量语句:if __name__ == '__main__':
一,,,从代码形式来看
由if条件测试语句if x == 'y' : 和内置变量__name__结合而成。
这是一个__name__值为Ture或False的表达式,用于条件测试
如果__name__=='main'为Ture,则执行if语句后面的代码,否则忽略
__name__:函数的内置变量
main:主函数,是一个相对概念
二,,,从代码中变量来看
如果一个函数的内置变量属于(==)主函数:这种情况是主函数(脚本文件)被直接执行时,脚本文件的内置变量全部属于自身脚本
如果一个函数的内置变量不全属于主函数(调用了其它模块):这种情况是当前执行的文件中调用了其它模块,文件中自然含有其它模块的变量
第一种情况很简单,内置变量全属于当前文件,代码全部执行
第二种情况,主函数的内置变量全部通过if条件测试,而被调用模块的条件变量无法通过条件测试,无法执行if后面的语句(就是if后面的语句都是给当前脚本文件用的,调用模块的变量不能随便改动,就别想用了)
这种变量的设置情况,在多线程中会出现的比较多,就是为了防止变量被定义混乱
三,,,从代码输出来看
__name__=='main',变量属于脚本文件,通过(这时__name__打印就是__main(这里的main是被主函数赋值的变量,包含.py,是一个文件,解释器会把文件里的变量读取并执行,变量改成什么样了,就执行成什么样)__,,,二者完全相等);
变量不属于脚本文件(属于调用模块),不通过(这时__name__打印就是__main(这里的main是被调用的模块名称,不含.py,是一个固定的值,解释器会读取变量,但没有通过if条件测试,变量不会改变,也不会被打印出来,只会打印出模块名称)__)。
四,,,从代码执行来看
if __name__ == '__main__': 代码开始执行的入口,本文件代码能正常执行,调用模块代码不能执行if语句下后的情况。
个人更倾向于把这类if语句看成是一种对变量改动的限制,尤其是在调用模块中,如果没有这种语句,变量范围不明确,很容易让人头大。