8. 模块与 __name__

__name__ 变量

在 Python 中,每个模块(也就是我们写的 .py 文件)都有一个内置的 __name__ 变量。当一个 Python 脚本直接运行时,Python 解释器会将该脚本的 __name__ 变量设置为 '__main__'。但是当这个脚本作为模块被导入到其他脚本中时,它的 __name__ 变量的值就会变为模块的名字(也就是该 .py 文件的文件名,不包含 .py 后缀)。

if __name__ == '__main__' 的作用

if __name__ == '__main__' 这行代码就像是一个开关。当我们希望某些代码在脚本直接运行时执行,而在被导入到其他脚本中时不执行,就可以把这些代码放在 if __name__ == '__main__' 语句块内。

python
# example.py
def greet(name):
    print(f"Hello, {name}!")

# 这段代码仅在直接运行时执行,被导入时不执行
if __name__ == '__main__':
    greet("World")
    # 可以放测试代码

▶ 运行结果:

输出
Hello, World!
💡 是否必须写 if __name__ == '__main__'

答案是不一定。如果一个模块只是单纯地定义函数、类等,没有需要在模块直接运行时执行的特殊代码,那么 if __name__ == '__main__' 就不是必须的。

但如果模块中有一些测试代码、初始化代码或者一些只希望在模块直接运行时执行的逻辑,那么使用 if __name__ == '__main__' 是一个很好的实践,可以增强代码的可读性和可维护性,避免在模块被导入时产生不必要的副作用。