代码点读机 / Python / __main__

__main__ Python · 常用约定

`__main__` 是一个特殊的字符串,当 Python 文件被直接运行时,模块的 `__name__` 变量会被设置为 `'__main__'`。就像当你住进一个无主的房子,就算上面不写,这里也会被默认成为你家。它常用来判断“这个文件是被直接运行,还是被其他文件导入”。

怎么用

在代码中写 `if __name__ == "__main__":`,如果成立,说明该文件被直接运行。

小例子

# 文件:脚本.py
def 主函数():
    print("我是主程序")
if __name__ == "__main__":
    主函数()

运行结果

我是主程序

对比:如果文件被其他文件导入,`__name__` 不等于 `'__main__'`

# 另一个文件导入脚本.py
import 脚本
# 此时 脚本.__name__ 为 '脚本',不等于 '__main__',所以不会自动执行主函数
这样可以让代码在被导入时不执行某些部分,只有直接运行才执行。

常见使用场景

1. 写脚本时,把测试代码放在 `if __name__ == "__main__":` 里:
def 加法(a, b):
    return a + b
if __name__ == "__main__":
    print(加法(1, 2))   # 直接运行才测试
2. 模块既可以被导入使用,也可以作为命令行工具运行:
# 文件:计算器.py
def 减法(a, b):
    return a - b
if __name__ == "__main__":
    import sys
    print(减法(int(sys.argv[1]), int(sys.argv[2])))

提醒:- `__main__` 不是关键字,只是一个普通字符串,但约定俗成。 - 如果文件被导入,`__name__` 会是模块名,而不是 `'__main__'`。 - 这种写法非常常见,几乎所有 Python 脚本都会用到。

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

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