__name__ 是 python 中用于标识模块运行方式的内置变量:直接运行时值为 ‘__main__’,被导入时为模块名(如 ‘mymodule’);常用于 if __name__ == ‘__main__’: 保护主程序逻辑,避免导入时执行;不可手动修改,否则破坏运行时判断机制。

__name__ 是 Python 中一个内置的特殊变量(也叫“双下划线变量”或“dunder 变量”),它会根据模块被使用的方式,自动被 Python 解释器设为不同的 字符串 值。它的核心作用是:** 让代码知道自己是以主程序运行,还是被当作模块导入。**
什么时候 __name__ 等于 ‘__main__’?
当你直接运行一个 Python 文件(比如在终端执行 python script.py),这个文件的 __name__ 就会被设为字符串 ‘__main__’。
这是最常用的判断依据,用来保护某些代码只在“直接运行”时才执行,避免被 import 时意外触发:
- 测试代码、示例调用、命令行入口逻辑通常放在这里
- 常见写法:if __name__ == ‘__main__’:
- 例如:
def say_hello():
print(“Hello!”)if __name__ == ‘__main__’:
say_hello()
这样,直接运行该文件会打印 Hello!;但如果被别的文件 import script,则不会自动执行 say_hello()
被导入时 __name__ 是什么?
如果这个文件被其他模块通过 import 引入(比如 import mymodule),那么它的 __name__ 就是模块名(即文件名去掉 .py 后缀),比如 ‘mymodule’。
立即学习“Python 免费学习笔记(深入)”;
这时 if __name__ == ‘__main__’: 块里的代码就不会运行——这正是模块化设计的关键机制。
它不是 常量,但别手动改
虽然 __name__ 是个变量,理论上可以赋值(比如 __name__ = ‘abc’),但 绝对不要这么做。Python 依赖它做运行时判断,手动修改会导致行为混乱,比如 if __name__ == ‘__main__’ 永远不成立,或者模块导入逻辑出错。
其他常见 dunder 变量也类似
像 __file__(当前文件路径)、__doc__(模块文档字符串)、__package__(包名)等,都是由 Python 自动设置的内置属性,作用各不相同,但思路一致:提供运行时上下文信息。
基本上就这些。理解 __name__ 的关键,就是抓住“谁在启动它”——是 Python 解释器直接跑它,还是另一个模块把它拉进来。
以上就是