Python模块中__name__变量的作用与主程序执行控制

陆景行
陆景行
发布时间:2026-10-16 | 5人浏览过
原创

本文详解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执行模块的内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表