🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 2.6. 测试模块 所有的 Python 模块都是对象,并且有几个有用的属性。您可以使用这些属性方便地测试您所编写的模块。下面是一个使用 `if` `__name__` 的技巧。 ``` if __name__ == "__main__": ``` 在继续学习新东西之前,有几个重要的观察结果。首先,`if` 表达式无需使用圆括号括起来。其次,`if` 语句以冒号结束,紧跟其后的是[缩进代码](indenting_code.html "2.5. 代码缩进")。 > 注意 > 与 C 一样,Python 使用 `==` 做比较,使用 `=` 做赋值。与 C 不一样,Python 不支持行内赋值,所以不会出现想要进行比较却意外地出现赋值的情况。 那么为什么说这个特殊的 `if` 语句是一个技巧呢?模块是对象,并且所有的模块都有一个内置属性 `__name__`。一个模块的 `__name__` 的值取决于您如何应用模块。如果 `import` 模块,那么 `__name__` 的值通常为模块的文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序一样直接运行模块,在这种情况下 `__name__` 的值将是一个特别的缺省值,`__main__`。 ``` >>> import odbchelper >>> odbchelper.`__name__` 'odbchelper' ``` 只要了解到这一点,您就可以在模块内部为您的模块设计一个测试套件,在其中加入这个 `if` 语句。当您直接运行模块,`__name__` 的值是 `__main__`,所以测试套件执行。当您导入模块,`__name__` 的值就是别的东西了,所以测试套件被忽略。这样使得在将新的模块集成到一个大程序之前开发和调试容易多了。 > 提示 > 在 MacPython 上,需要一个额外的步聚来使得 `if` `__name__` 技巧有效。点击窗口右上角的黑色三角,弹出模块的属性菜单,确认 Run as __main__ 被选中。 ## 进一步阅读 * _Python Reference Manual_ 讨论了[导入模块](http://www.python.org/doc/current/ref/import.html)的底层细节。