2.6. 测试模块

Python 模块是对象,并且具有几个有用的属性。您可以利用这一点在编写模块时轻松地对其进行测试。下面是一个使用 if __name__ 技巧的示例。


if __name__ == "__main__":

在您开始了解好东西之前,先快速观察一下。首先,if 表达式周围不需要括号。其次,if 语句以冒号结尾,后面跟着缩进的代码

Note
C 语言一样,Python 使用 == 进行比较,使用 = 进行赋值。与 C 不同,Python 不支持内联赋值,因此不会出现意外赋值为您认为要比较的值的情况。

那么为什么这个特定的 if 语句是一个技巧呢?模块是对象,并且所有模块都有一个内置属性 __name__。模块的 __name__ 取决于您如何使用该模块。如果您 import 该模块,则 __name__ 是模块的文件名,不带目录路径或文件扩展名。但是您也可以直接将模块作为独立程序运行,在这种情况下,__name__ 将是一个特殊的默认值,即 __main__

>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'

了解了这一点,您就可以通过将测试套件放在这个 if 语句中来为模块设计测试套件。当您直接运行模块时,__name____main__,因此测试套件会执行。当您导入模块时,__name__ 是其他值,因此测试套件会被忽略。这使得在将新模块集成到更大的程序之前更容易开发和调试它们。

Tip
MacPython 上,要使 if __name__ 技巧生效,还需要执行一个额外的步骤。单击窗口右上角的黑色三角形弹出模块的选项菜单,并确保选中了 作为 __main__ 运行

关于导入模块的进一步阅读