聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

作者:昊虹图像算法 时间:2022-05-10 18:06:44 

Python中if __name__ == ‘__main__‘作用

要搞清楚这个问题,要知道以py作为后缀的Python代码文件,有两种使用方式,第一种方式是直接运行,另一种方式是作为模块被别的py文件导入。

当采用第一种方式直接运行自身时,__name__的值为__main__;

当采用第二种方式被别的模块导入时,其__name__的值为其文件名(通常也称为模块名);

举例实测如下:

用PyCharm新建一个Python工程后,新建两个py文件,文件名分别为AAA.py和BBB.py

然后在AAA.py中写上如下代码:

print('当前AAA.py中__name__的值为:', __name__)

在BBB.py中写上如下代码:

import AAA

然后分别运行这两个Python文件,结果如下:

运行AAA.py的结果如下:

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

运行BBB.py的结果如下:

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

这个示例除了应证了上面说的py文件的两种使用方式,还表明使用import导入py文件/模块时,这个被导入的py文件中没有缩进的代码会被全部执行一遍。

这样就带来了一个问题,如果我在导入模块AAA.py时如果有想代码不想被执行,那么该怎么做呢?语句“if __name__ == ‘__main__’”就能实现这个作用,具体怎么用,有朋友看了上面的例子应该已经明白了,如果还不明白,请看下面这个例子:

修改上面的AAA.py的代码为如下代码:

print('\n')
print('当前AAA.py中__name__的值为“{}”'.format(__name__))
if __name__ == '__main__':
   print('\n')
   print('当前运行的文件是AAA.py')
else:
   print('\n')
print('当前AAA.py是作为模块被其它py文件导入')

再次分别运行AAA.py和BBB.py,结果分别如下:

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

可见通过语句“if __name__ == ‘__main__’,就能判断出一个py文件是直接运行还是作为模块文件被别的py文件导入的,进而通过这个判断实现一些代码的不被执行。

那么通常来说哪些代码不希望被执行呢?当文件被作者定义为一个模块时,里面难免含有一些测试代码,当模块被import时,这些代码是不希望被执行的。

补充:if __name__ == '__main__':的运行原理

每个python模块(python文件,也就是此处的 test.py 和 import_test.py)都包含内置的变量 __name__,当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。

 “__main__” 始终指当前执行模块的名称(包含后缀.py)。进而当模块被直接执行,__name__ == 'main' 结果为真。

为了进一步说明,我们在 test.py 脚本的 if __name__=="__main__": 之前加入 print(__name__),即将 __name__ 打印出来。文件内容和结果如下:

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

可以看出,此时变量__name__的值为"__main__"。

再执行 import_test.py,执行结果如下:

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

此时,test.py中的__name__变量值为 test,不满足 __name__=="__main__" 的条件,因此,无法执行其后的代码。

来源:https://blog.csdn.net/wenhao_ir/article/details/123016649

标签:python,name,main
0
投稿

猜你喜欢

  • Tag的自定义类

    2010-03-18 15:53:00
  • Python自动扫描出微信不是好友名单的方法

    2023-03-14 09:25:44
  • 解决python matplotlib imshow无法显示的问题

    2023-07-19 23:59:25
  • Selenium爬取b站主播头像并以昵称命名保存到本地

    2023-05-18 01:26:36
  • Python Vaex实现快速分析100G大数据量

    2021-05-24 08:48:58
  • Python学习笔记之图片人脸检测识别实例教程

    2021-12-03 06:17:28
  • Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)

    2023-03-28 12:39:51
  • 除Console.log()外更多的Javascript调试命令

    2023-08-12 23:31:17
  • Yii框架实现乐观锁与悲观锁流程详解

    2023-11-16 13:38:38
  • PHP日志LOG类定义与用法示例

    2023-09-10 20:02:56
  • Matlab中关于argmax、argmin函数的使用解读

    2023-06-27 20:36:53
  • python目标检测SSD算法训练部分源码详解

    2021-08-01 02:23:15
  • 学生如何免费使用Pycharm专业版学生认证教程

    2021-11-20 16:25:13
  • python 执行终端/控制台命令的例子

    2022-11-16 20:41:29
  • Jupyter Notebook的连接密码 token查询方式

    2023-10-21 23:51:47
  • 在python代码中加入环境变量的语句操作

    2023-03-01 22:58:19
  • Python中的多行注释文档编写风格汇总

    2023-05-05 02:41:18
  • 深入理解Python3中的http.client模块

    2021-05-26 04:12:34
  • 使用Python编写简单网络爬虫抓取视频下载资源

    2023-11-02 01:44:22
  • 浅谈pandas中shift和diff函数关系

    2022-11-15 08:48:42
  • asp之家 网络编程 m.aspxhome.com