代码点读机 / Python / __name__

__name__ Python · 常用约定

`__name__` 是一个内置变量,用来表示当前模块的名字。如果这个文件是被直接运行的,它的值就是 `'__main__'`;如果这个文件是被其他文件导入的,它的值就是模块名(文件名)。就像一个人在不同场合有不同的身份:在家是主人,在公司是员工。

怎么用

直接访问 `__name__`,通常在条件判断中使用。

小例子

# 文件:我的模块.py
print("我的模块的 __name__ 是:", __name__)
if __name__ == "__main__":
    print("我是被直接运行的")
else:
    print("我是被导入的")

运行结果

我的模块的 __name__ 是: __main__
我是被直接运行的
**如果被导入**,假设在另一个文件中 `import 我的模块`,输出:
我的模块的 __name__ 是: 我的模块
我是被导入的

对比:直接看 `__name__` 可以知道文件怎么被使用

# 很多库利用这个特性决定是否执行某些代码

常见使用场景

1. 判断是否为主程序:
if __name__ == "__main__":
    # 只有直接运行才执行这里的代码
    print("程序启动")
2. 在模块中提供测试代码:
def 功能():
    pass
if __name__ == "__main__":
    # 测试代码
    assert 功能() == 预期结果

提醒:- `__name__` 是模块的一个属性,每个 Python 文件都有。 - 如果模块被导入,`__name__` 的值是模块名(不含 .py 后缀)。 - 如果你在一个包内导入,`__name__` 可能包含点号路径。

官方文档:https://docs.python.org/zh-cn/3/library/__main__.html

在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Python全部词条