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之禅

猜你喜欢

2024-03-04
用 Python 破解隔壁老王家的 Wi-Fi 密码,刺激!
2023-06-12
Python3.12新特性
2023-04-17
Python虚拟环境使用
2023-04-15
如何删除macOS系统默认的Python2.7并替换成最新版python3.11
2022-12-09
python 中return和yield有什么区别
2022-08-17
如何利用多态干掉 if else 语句
2022-07-22
10个python初学者常犯的错误
2022-06-10
flask-siwadoc 支持openapi 分组功能
2022-06-10
在Python应用中Telegram 机器人搭建消息提醒
2022-05-21
为啥用 PIP 安装库也会提示UnicodeDecodeError?