# 三、主模块和非主模块 # ## 1、主模块和非主模块的定义 ## 在 Python 函数中,如果一个函数调用了其他函数完成一项功能,我们称这个函数为主函数,如果一个函数没有调用其他函数,我们称这种函数为非主函数。主模块和非主模块的定义也类似,如果一个模块被直接使用,而没有被别人调用,我们称这个模块为主模块,如果一个模块被别人调用,我们称这个模块为非主模块。 ## 2、__name__ 属性 ## 在 Python 中,有主模块和非主模块之分,当然,我们也得区分他们啊。那么怎么区分主模块和非主模块呢? 这就需要用到 `__name__` 属性了,这个 `——name——` 属性值是一个变量,且这个变量是系统给出的。利用这个变量可以判断一个模块是否是主模块。如果一个属性的值是 `__main__` ,那么就说明这个模块是主模块,反之亦然。但是要注意了:** 这个 `__main__` 属性只是帮助我们判断是否是主模块,并不是说这个属性决定他们是否是主模块,决定是否是主模块的条件只是这个模块有没有被人调用** 具体看示例: 首先创建了模块 lname ,然后判断一下是否是主模块,如果是主模块就输出 `main` 不是,就输出 `not main` ,首先直接运行该模块,由于该模块是直接使用,而没有被人调用,所以是主模块,因此输出了 `main` ,具体看下图: `com/Learn/module/nameattributes/lname.py` 的代码: ```python #!/usr/bin/env python # -*- coding: UTF-8 -*- if __name__ == '__main__': print('main') else: print('not main') ``` 直接运行 `lname.py` ,输出结果: ``` main ``` 然后又创建一个 user_lname 模块,里面只是简单的导入了 lname 模块,然后执行,输出的结果是 `not main` ,因为 lname 模块被该模块调用了,所以不是主模块,输出结果如图: `com/Learn/module/nameattributes/user_lname.py` 的代码: ```python #!/usr/bin/env python # -*- coding: UTF-8 -*- import lname # 导入 lname 模块 ``` 运行 `user_lname.py` ,输出结果: ``` not main ```