1.6. 测试模块

Python模块是对象,并且有几个有用的属性。在编写模块时,你可以利用这一点更容易地测试模块。

例 1.7. if __name__ 技巧


if __name__ == "__main__":

在开始学习好东西之前,有几点重要的观察结果。第一,在 if 表达式周围不需要小括号。第二,if 语句以冒号结束,后面跟着缩近块

Note

象C语言一样,Python使用 == 进行比较,使用 = 进行赋值。不象C语言,Python不支持行内赋值,所以不会出现想要进行比较却意外地出现赋值的情况。

那么为什么说这个特殊的 if 语句是一个技巧呢?模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值要看你如何应用模块。如果 import 模块,那么 __name__ 的值通常为模块的文件名,不带路径或者文件扩展名。但是你也可以象一个标准的程序一样直接运行模块,在这种情况下 __name__ 的值将是一个特别的缺省值, __main__

例 1.8. 一个导入模块的 __name__

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

一旦了解这一点,你可以在模块内部为你的模块设计一个测试套件,在其中加入这个 if 语句。当你直接运行模块, __name__ 的值是 __main__,所以测试套件执行。当你导入模块, __name__ 的值就是别的东西了,所以测试套件被忽略。这样使得在将新的模块集成到一个大程序之前开发和调试容易多了。

Tip

在MacPython上,需要一个额外的步聚来使得 if __name__ 技巧有效。点击窗口右上角的黑色三角,弹出模块的属性菜单,确认Run as __main__被选中。


进一步阅读