Date:2022.1.1
Author:qyan.li
Topic:浅析Python中
if __name__ == '__main__'
的原理和用法Reference:https://blog.csdn.net/heqiang525/article/details/89879056
一、用法说明:
提及Python中if __name__ == '__main__'
的用法,,就需要提到Python中.py
文件被运行的两种方式:
-
py文件作为脚本文件直接运行
-
py文件被
import
至其他文件中执行 而
if __name__ == '__main__'
的用法即体现在py文件被import
至其他文件进行的执行时,通常情况下而言,当文件被当作脚本直接运行时,无论是包含在if __name__ == __main__
中,还是在之外的代码均会被运行,但是当py文件被import
至其他文件内执行时,就仅会执行if __name__ == __main__
之前的内容,而之后的内容不会被执行。 参照下述代码说明:
DivideIntoFiles
存在两个文件classPerson.py
和TestCode.py
# classPerson.py def testFunction(): print('This is a test function!') testFunction() if __name__ == '__main__': print('This is a standard function')
直接运行
classPerson.py
,结果显示:This is a test function! This is a standard function
此时
if __name__ == __main__
前后的代码均被执行# TestCode.py from DivideIntoFiles import classPerson
直接运行
TestCode.py
,结果显示:This is a test function!
此时,仅
if __name__ == __main__
前的代码被执行,其后的代码未被执行由上述代码剖析可以看出:
if __name__ == __main__
的作用体现在.py文件被import
至其他文件执行时,此时仅if __name__ == __main__
前的代码会被执行,而后的代码会被忽略
二、原理说明:
根据上述分析,已经了解到代码中if __name__ == __main__
会对代码运行产生的影响,那为什么会产生此种影响呢?
分析上述代码,既然if __name__ == __main__
后的代码未被执行,说明此时if
语句的条件不成立,即当代码被import
时,__name__
并不为__main__
,同样,可以借助于代码验证。
代码示例:
可以分别在于classPerson.py
和TestCode.py
文件中分别添加print(__name__)
语句,分别观测输出:
# classPerson.py
def testFunction():
print('This is a test function!')
testFunction()
print(__name__) # output->__main__
if __name__ == '__main__':
print('This is a standard function')
对比于TestCode.py
中:
from DivideIntoFiles import classPerson
print(__name__) # output->DivideIntoFiles.classPerson
借助于上述代码,可以明显得出,在文件被
import
时,此时的__name__
并非为__main__
,因此不满足此时的if
判断语句,故会出现上述分析的情况
三、小总结:
照例,小总结一下:
.py
文件被import
时,if __name__ == '__main__'
后的程序不会被执行- 此种现象产生的原因在于当文件被
import
时,程序中__name__
变量发生改变,不再等于__main__
,if
条件不成立,无法执行 - 自定义引进文件,可以帮助理解
from 'package' import 'module'
的真正含义