if __name__ == "__main__":
是 Python 中常用的一种条件判断语句,主要作用是在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码。
具体来说,当一个 Python 模块被导入时,Python 解释器会将该模块的文件名存储在内置变量 __name__
中。如果该模块是主程序入口,则 __name__
的值为字符串 "__main__"
,否则 __name__
的值为该模块的文件名。
因此,当我们使用 if __name__ == "__main__":
进行条件判断时,只有当当前模块作为主程序入口时,才会执行 if
语句块内的代码。
这个语句的作用可以有以下几个方面:
-
模块测试:当我们新写一个模块时,可以在
if __name__ == "__main__":
语句块中编写测试代码,用于测试该模块的功能是否正确。 -
防止模块被导入时执行不必要的代码:有些模块在被导入时会自动运行一些代码,如果我们不希望这些代码在被导入时执行,可以把这些代码放到
if __name__ == "__main__":
语句块中。 -
方便调试: 在调试程序时,有时需要单独运行某个模块,此时将测试代码放在
if __name__ == "__main__":
语句块中可以方便地运行该模块。
综上所述,if __name__ == "__main__":
是一个常见的用法,可以帮助我们实现模块的测试、防止无用代码的执行和方便调试等。
1、对于存在if __name__ == "__main__":时候的代码执行顺序问题:
执行顺序是自上而下,不会先执行“__name__ == "__main__"”
# 执行顺序是自上而下,不会先执行“__name__ == "__main__"”
print("1、首先执行的位置")
def test_fun():
print("我不会自己执行")
test_fun()
# 在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码
def main():
print("3、最后执行的位置")
if __name__ == "__main__":
print("2、再次执行的位置")
main()
输出为:
1、首先执行的位置
我不会自己执行
2、再次执行的位置
3、最后执行的位置
2、为什么使用if __name__ == "__main__":
test_main.py文件:
# 执行顺序是自上而下,不会先执行“__name__ == "__main__"”
print("1、首先执行的位置")
def test_fun():
print("我不会自己执行")
test_fun()
# 在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码
def main():
print("3、最后执行的位置")
if __name__ == "__main__":
print("2、再次执行的位置")
main()
other.py文件:
from test_main import test_fun
import test_main
无论上面哪种调用test_main.py文件,都会执行下面的代码:
print("1、首先执行的位置") def test_fun(): print("我不会自己执行") test_fun()
结果就是输出:
1、首先执行的位置
我不会自己执行
import该模块的时候就执行了在test_main.py文件中执行的函数“test_fun()”【不会执行只是定义def()而未调用的函数】,但是没有执行"main()",说明了if __name__ == "__main__"的作用:在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码