脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 聊聊Python代码中if __name__ == ‘__main__‘的作用是什么

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

2022-11-04 10:14昊虹图像算法 Python

一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的python脚本中被调用执行,这篇文章主要给大家介绍了关于Python代码中if __name__ == ‘__main__‘的作用是什么的相关资料,需要的朋友可以参考下

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__" 的条件,因此,无法执行其后的代码。

总结

到此这篇关于Python代码中if __name__ == ‘__main__‘的作用是什么的文章就介绍到这了,更多相关Python中if __name__ == ‘__main__‘作用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wenhao_ir/article/details/123016649

延伸 · 阅读

精彩推荐
  • Pythonpython实现高斯模糊及原理详解

    python实现高斯模糊及原理详解

    高斯模糊是一种常见的模糊技术,本文主要介绍了python实现高斯模糊及原理详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    kelly学挖掘12122022-01-08
  • PythonPOC漏洞批量验证程序Python脚本编写

    POC漏洞批量验证程序Python脚本编写

    这篇文章主要为大家介绍了POC漏洞批量验证程序Python脚本编写的完整示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    webdogc11262022-10-08
  • Python简单了解Django项目应用创建过程

    简单了解Django项目应用创建过程

    这篇文章主要介绍了简单了解Django项目应用创建过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    君子攸宁3092020-07-06
  • PythonWindows下Sqlmap环境安装教程详解

    Windows下Sqlmap环境安装教程详解

    这篇文章主要介绍了Windows下Sqlmap环境安装,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    Strawberry Bubblegum4072020-08-04
  • Python用pytorch的nn.Module构造简单全链接层实例

    用pytorch的nn.Module构造简单全链接层实例

    今天小编就为大家分享一篇用pytorch的nn.Module构造简单全链接层实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    AItitanic4392020-04-22
  • Pythonpython爬虫之pyppeteer库简单使用

    python爬虫之pyppeteer库简单使用

    Puppeteer 是 Google 基于 Node.js 开发的一个工具,有了它我们可以通过 JavaScript 来控制 Chrome 浏览器的一些操作,当然也可以用作网络爬虫上,其 API 极其完善,...

    努力生活的黄先生4872021-12-11
  • PythonPython查找算法之插补查找算法的实现

    Python查找算法之插补查找算法的实现

    这篇文章主要介绍了Python查找算法之插补查找算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    Amo Xiang5122021-10-07
  • PythonPython基于递归实现电话号码映射功能示例

    Python基于递归实现电话号码映射功能示例

    这篇文章主要介绍了Python基于递归实现电话号码映射功能,结合实例形式分析了Python针对字典的递归、遍历相关操作技巧,需要的朋友可以参考下 ...

    Together_CZ6512021-01-31