在阅读别人写的自定义模块时,经常会看到有如下这行判断语句:
1 | if __name__ == '__main__': |
这行代码的作用是什么呢?本节就详解讲解以下它的作用。
一般情况下,当我们写完自定义的模块之后,都会写一个测试代码,检验一些模块中各个功能是否能够成功运行。例如,创建一个 candf.py 文件,并编写如下代码:
1 | ''' |
单独运行此模块文件,可以看到如下运行结果:
测试数据:0 摄氏度 = 32.00 华氏度
测试数据:0 华氏度 = -17.78 摄氏度
在 candf.py 模块文件的基础上,在同目录下再创建一个 demo.py 文件,并编写如下代码:
1 | import candf |
运行 demo.py 文件,其运行结果如下所示:
1 | 测试数据:0 摄氏度 = 32.00 华氏度 |
可以看到,Python解释器将模块(candf.py)中的测试代码也一块儿运行了,这并不是我们想要的结果。想要避免这种情况的关键在于,要让 Python 解释器知道,当前要运行的程度代码,是模块文件本身,还是导入模块的其它程序。
为了实现这一点,就需要使用 Python 内置的系统变量 __name__,它用于标识所在模块的模块名。例如,在 demo.py 程序文件中,添加如下代码:
1 | print(__name__) |
可以看到,当前运行的程序,其 name 的值为 __main__,而导入到当前程序中的模块,其 name 值为自己的模块名。
因此,if __name__ == '__main__':
的作用是确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法,执行其中的测试代码;反之,如果只是作为模块导入到其他程序文件中,则此表达式将不成立,运行其它程序时,也就不会执行该判断语句中的测试代码。