Why We Use if __name__ == __main__ in Python

Python 以其简单性和可读性而闻名,但是它包含了一小段代码 :if name == '__main__': 经常让新手感到困惑。

理解 name 属性

为了理解 if name == '__main__': 的重要性,我们首先需要理解 name 在 Python 中的含义。Python 中的每个模块都有一个名为 name 的内置属性。当模块作为主程序运行时,name 的值被设置为 main,否则 name 的值将被设置为模块的名称。这种区别对于理解这个条件语句所支持的功能至关重要。

为什么需要 if name == '__main__': ?

if name == '__main__': 的主要用途是控制代码的执行。当您编写 Python 脚本时,您可能希望在脚本直接执行时运行某些代码,而不是在将其作为模块导入另一个脚本时运行。这就是 if name == '__main__': 发挥作用的地方。它允许您区分这两种场景,为您的 Python 文件启用双重用例:作为可重用模块或作为独立脚本。

Use Cases and Benefits

Reusable Code

通过封装应该只在脚本直接在该条件中执行时才运行的代码,您可以将脚本作为模块重用。其他脚本可以导入函数、类或变量,而无需执行脚本级代码。

Testing and Debugging

这种模式对于测试非常有用。您可以在脚本中包含测试代码,以便在脚本直接执行时运行测试。这意味着您可以在同一个文件中测试模块功能,使测试与代码保持接近。

Script Entry Points :

对于较大的应用程序或包,if name == '__main__': 可以作为一个明确的入口点。对于其他开发人员来说,在哪里找到脚本的主要逻辑或哪一部分代码开始执行是非常清楚的。

Practical Example:

让我们通过一个实际的例子来理解它们的区别。

创建一个名为 script.py 的简单 Python 脚本。

def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

if __name__ == "__main__":
    print("The script is run directly")

当我们直接使用 python script.py 运行 script.py 时,输出将是

Hello, Alice!
The script is run directly

现在,让我们将 script.py 导入到另一个名为 main.py 的 Python 脚本中

import script

当我们使用 python main.py 运行 main.py 时,输出将是

Hello, Alice!

我的开源项目

酷瓜云课堂-开源知识付费解决方案


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。