Python模块中__name__变量的作用与主程序执行控制
本文详解Python中__name__变量的工作机制,演示如何通过判断__name__ == '__main__来防止模块被导入时意外执行测试代码。通过christmastree模块与main.py的示例,展示如何仅输出全局变量而不运行函数逻辑,实现模块复用与独立运行的灵活控制。
Python模块__name__变量与主程序执行控制
前言:
首先创建一个名为christmastree的模块。在该模块中,定义一个全局变量,接着创建一个名为fun_christmastree()的函数,最后使用print()函数输出一些内容。
具体代码实现如下:
printree = "我是小菜鸡" # 定义全局变量”小菜鸡“
def fun_christmastree(): # 定义函数
"""功能: 一个梦
:return 无返回值
"""
printree = "新星计划,颁奖...我获奖了@^。^@" # 定义局部变量
print(printree) # 输出局部变量
# ********************函数体外*********************** #
print("\n夜深了……\n")
print("===============开始做梦……===============")
fun_christmastree() # 调用函数
print("===============开始做梦……===============")
printree = "原来是一场梦," + printree + "-_-"
print(printree) # 输出全局变量在与christmastree模块相同的目录下,新建一个名为main.py的文件。在main.py中导入christmastree模块,并通过print()语句输出该模块中全局变量printree的值。
代码示例如下:
import christmastree
print("全局变量的值为:", christmastree.printree)运行上述代码后,屏幕将显示如图所示的结果:

从运行结果可以看出,导入模块后,不仅输出了全局变量的值,模块中原本直接执行的测试代码也被运行了。这通常不是我们期望的行为。若只想输出全局变量的值,可以在模块中将原本直接执行的测试代码包裹在if语句中。
因此,可以将christmastree模块的代码修改为以下形式:
__main__判断机制与代码示例
printree = "我是小菜鸡" # 定义全局变量”小菜鸡“
def fun_christmastree(): # 定义函数
"""功能: 一个梦
:return 无返回值
"""
printree = "新星计划,颁奖...我获奖了@^。^@" # 定义局部变量
print(printree) # 输出局部变量
# ********************判断是否以主程序的形式运行*********************** #
if __name__ == "__main__":
print("\n夜深了……\n")
print("===============开始做梦……===============")
fun_christmastree() # 调用函数
print("===============梦醒了……===============")
printree = "原来是一场梦," + printree + "-_-"
print(printree) # 输出全局变量再次执行导入模块的main.py文件,将显示如图所示的结果。从执行结果可见,测试代码并未被执行。

此时,如果直接执行christmastree.py文件,将显示如下图所示的结果:

说明:每个模块定义中都包含一个记录模块名称的变量__name__。程序可通过检查该变量来确定当前模块的执行上下文。如果一个模块不是被其他程序导入执行,而是直接在解释器的顶级模块中运行,那么该模块的__name__变量值为__main__。
到此关于Python实现以主程序形式执行模块的介绍结束,更多相关Python执行模块的内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









