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