<< >>

diveintopython.org |

Python for experienced programmers

## 1.6. 测试模块

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

例 1.7. `if` `__name__` 技巧

    if __name__ == "__main__":

在开始学习好东西之前，有两点要说明。第一，在 `if` 表达式周围不需要小括号。第二，象C语言一样，Python使用 `==` 进行比较，使用 `=` 进行赋值。不象C语言，Python不支持行内赋值，所以不存在把赋值当成比较的偶然情况。

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

例 1.8. 一个导入模块的 `__name__`

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

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

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

进一步阅读 |

- Python Reference Manual 讨论了导入模块的低层细节。

« 缩排代码 | 字典 101 »