【Python】if __name__ == '__main__'的作用
文章目录
在介绍这个if __name__ == '__main__'
的作用之前,需要补充一些Python知识作为铺垫:
- Python中双下划线开头且结尾的是内置的变量或函数。
- Python不像Java一样有主函数,它是脚本语言,是从上往下按顺序执行的(执行所有顶层代码,也就是没有缩进的代码)。
- 一个py文件(例如:
mian.py
)可以理解为一个模块,这个模块可以自己单独执行,也可以被导入其他模块中执行。 - 如果模块A被导入到模块B中,则模块A中的顶层代码也会被执行一遍的。
下面我们先通过一些例子看看__name__
是什么?
1. __name__
是什么?
先定义一个main_module.py
:
|
|
再定义一个other_module.py
:
|
|
执行main_module.py
得到如下输出:
|
|
执行other_module.py
得到如下输出:
|
|
可以看出,当前模块被直接执行时__name__
就是__main__
,当前模块作为被导入模块执行时__name__
就是模块名。
2. 为什么要使用if __name__ == '__main__'
?
此处举一个例子大家就可以理解为什么要使用if __name__ == '__main__'
了。
假设我写了个模块square_perimeter.py
,用于计算正方形周长:
|
|
直接执行上述模块,可以得到如下输出:
|
|
现在假设有一个模块(test.py
)中需要用到该计算正方形周长的模块:
|
|
执行test.py
可以得到如下输出:
|
|
可见,我们在square_perimeter.py
中写的单测也被执行了,这如何了得?此时我们就可以按如下方法来改造square_perimeter.py
:
|
|
此时直接执行square_perimeter.py
可以得到:
|
|
执行test.py
可以得到:
|
|
所以,if __name__ == '__main__'
可以用于设置一段仅在直接执行该模块时才被执行的代码。
无论是有主函数的语言,还是脚本型的语言,其一个被执行的程序的入口肯定只有一个,所以该判断也可以用于判断程序的入口,即是从当前模块开始执行的,还是从其他模块开始执行的,然后基于此做一些逻辑。
文章作者 hongmao
上次更新 2022-02-27