Python中的 if __name__ == '__main__' 是什么?

By 刘志军 , 2024-03-04, 分类: Python

python

新手学Python的时候,一定见过if __name__ == '__main__':这段代码,尤其是在写Python脚本的时候。

这段代码究竟是啥意思,有啥作用?

为了搞懂这行代码,首先要了解Python中的__name__属性和主程序概念。

name 属性

在Python中,每个Python文件(不管是被执行的脚本还是被导入的模块)都有一个内置的__name__属性。

当文件被直接执行时,__name__的值会被设置为'__main__',而当文件被导入到其他文件时,__name__的值则会被设置为文件的名字。

主程序和模块

主程序:就是直接被运行的Python文件,程序运行的入口,在这个文件中,__name__的值是'__main__'

模块:被其他Python文件导入(import)使用的文件。在这个文件中,__name__的值是该文件的名称。

if name == 'main'是什么?

所以,现在你应该明白这行代码的意义了吧?就是让Python判断当前运行的环境是主程序还是被导入的模块。

如果是主程序,那么 if 代码块将被执行。如果是被导入的模块,那么这部分代码就不会被执行。

为什么要这样做?

这样做有几个好处:

  1. 模块化和复用:允许单个Python文件既可以被导入使用,也可以作为独立的程序运行。
  2. 测试代码:你可以在if __name__ == '__main__':下面写一些测试代码,只有在文件作为主程序运行时这些代码才会被执行,这样就不会影响到此模块被其他文件导入时的行为。
  3. 代码清晰:这种做法可以清晰地区分模块的接口和实现,让代码更易于理解和维护。

示例

假设有两个文件:module.pymain.py

module.py内容:

def foo():
    print("foo() from module.py")

if __name__ == '__main__':
    print("module.py is being run directly")
else:
    print("module.py is being imported into another module")

main.py内容:

import module

module.foo()

当你直接运行 module.py 时,会看到"module.py is being run directly"。

但如果你运行main.pymodule.py被导入,你会看到"module.py is being imported into another module",然后是"foo() from module.py"。

通过这个例子,你可以看到if __name__ == '__main__':如何帮助区分直接执行和被导入的情况,以及如何根据不同的运行环境执行不同的代码。

这在开发大型Python应用时特别有用,可以让每个文件既可以独立运行,也可以作为模块被其他文件导入。

总结:

这行代码的作用是判断当前运行的是主程序还是被导入的模块。


关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

猜你喜欢

2015-06-17
如何在Python中正确使用static、class、abstract方法
2020-06-13
python 中 xml 转换为 json
2017-12-26
5个酷毙的Python工具
2020-06-01
最新抖音去水印解析
2017-05-15
一步一步教你认识Python闭包
2022-03-13
从一段小代码开始学习如何重构
2013-10-30
Python“不为人知的”特性
2020-06-04
如何用Python执行linux命令
2020-06-07
python合并两个字典
2019-03-09
30个Python 小例子,帮你快速上手Python