阐明 Python 编程中的 if __name__ == “__main__“: 的作用和机理


🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/

让我们一起来详细探讨一下这个问题:if __name__ == "__main__": 的作用是什么?

A Python programmer with a futuristic vibe. The programmer is wearing sleek, high-tech glasses and is surrounded by floating lines of code and virtual screens displaying complex algorithms. The background is a futuristic cityscape with neon lights and advanced technology. --version 5.2 --quality 1 --chaos 0 --stylize 100 --aspect 4:3

背景:在 Python 中,每个 .py 文件其实都可以被视为一个模块(module)。这些模块可以包含函数、变量、类等。当我们运行一个 Python 脚本时,Python 解释器会执行该脚本中的代码。但是,有时我们也会将一个模块导入到其他脚本中,以便在其他地方重用其中的功能

那么我们如何区分一个模块是直接被执行,还是被导入到其他模块中呢?

解决方案:

  • 这就是 if __name__ == "__main__": 的妙用!
  • 当一个 Python 文件被直接执行时,Python 解释器会将该文件的 __name__ 设置为特殊值 "__main__"。这意味着,如果我们在文件中使用了这个条件,那么在这行代码下面的代码只有在直接执行该文件时才会被执行。
  • 如果这个文件被导入到其他模块中,__name__ 的值将是模块的名称,而不是 "__main__"。因此,通过这个条件,我们可以控制哪些代码只在直接执行时运行,而在导入时不运行

示例:

test.py 中编写如下 Python 代码:

print("This is test.py")
print(f"__name__: {__name__}")def say_hello():print("Hello from my_module!")if __name__ == "__main__":print("This code runs when test.py is directly executed.")

我们直接运行 test.py,会得到以下输出:

This is test.py
__name__: __main__
This code runs when test.py is directly executed.

但如果我们在另一个 Python 脚本或 Jupyter Notebook 中导入了 test 模块,则不会看到 This code runs when test.py is directly executed. 这行输出。如下示意:

import_test.py:

import test

if __name__ == "__main__":

在这里插入图片描述

__name__ 是 Python 中一个特殊的内置变量,用于表示当前模块的名称(作为模块标识),它的值取决于当前代码运行的环境。一个 Python 文件,它如果被直接运行,其 __name__ 的值是 __main__。但如果该文件被导入到另一个文件中,__name__ 的值则是文件名(Python 文件本身的名称去掉 .py 后缀),比如这里的 test。这个变量通常用于编写可重用的模块,因为它允许检查模块是被导入的还是被直接运行。总之,__name__ 变量帮助我们判断代码是被直接运行还是被导入到其他程序中,从而更高效地重用代码。

__name__ == "__main__" 是什么意思?

  • 当一个 Python 模块在最高层级代码环境中执行时,它的 __name__ 会被设为字符串 "__main__"
  • 这个最高层级代码环境通常是用户指定最先启动运行的 Python 模块,也被称为应用的 “入口点”。它还会导入程序所需的所有其他模块。

因此,if __name__ == "__main__": 这行代码就是作为一个条件限制,在它下面的代码只有在直接运行这个 test.py 文件的时候才会执行,当作为模块在别的 .py 文件或 Jupyter Notebook 中调用的时候,test.py 中这行代码下面的代码不会被执行

作用 🐍🚀:

  • 这个特性非常有用,因为它允许我们在开发和测试阶段直接运行脚本,同时在作为模块被导入时不执行测试的代码
  • 想象一下,如果我们在一个大型软件项目中有很多模块,每个模块都有一些测试代码。我们只想在直接运行模块时执行这些测试代码,而在其他地方导入时不执行。这时,if __name__ == "__main__": 就派上了用场。if __name__ == "__main__": 块内部可以包含用于单元测试的代码。你可以在这里编写测试用例,验证模块的功能是否正常。
  • 总之,if __name__ == "__main__": 是一个重要的 Python 构造,它让我们的代码更加灵活、可重用。

注意事项 🤡:

  • 模块导入和执行顺序:在 Python 中,当一个脚本作为主程序执行时,它会从上到下按顺序执行。如果你在 if __name__ == "__main__": 块之外执行一些操作,这些操作可能会在其他模块导入之前执行,导致意外的行为。因此,确保将主要逻辑放在 if __name__ == "__main__": 块内。
  • 此外,当需要进行调试时,也可以在 if __name__ == "__main__": 块中添加调试输出语句,以便了解程序的执行过程。但在最终版本中,不要忘记移除或禁用这些调试输出。
  • 避免全局变量:在 if __name__ == "__main__": 下面定义的变量对整个模块来说就是全局变量。这可能会影响其他模块的行为。为了避免命名空间冲突,尽量将变量和函数封装在类或函数内部,而不是直接在全局作用域中定义。
  • 避免执行不必要的代码:在 if __name__ == "__main__": 块内,只放置与主程序相关的代码。避免在这里执行不必要的初始化、计算或其他操作,以提高性能并减少不必要的资源消耗。
  • 文档和注释:在 if __name__ == "__main__": 块之前,添加适当的文档字符串和注释,以便其他开发人员了解模块的用途、功能和使用方法。良好的文档和注释有助于项目的可维护性和可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现中国剩余定理

中国剩余定理又称孙子定理,是数论中一个重要定理。最早可见于我国的数学著作《孙子算经》卷下“物不知数”问题,原文如下: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即…

海康威视球机摄像头运动目标检测、跟踪与轨迹预测

一、总体方案设计 运动目标检测与跟踪方案设计涉及视频流的实时拍摄、目标检测、轨迹预测以及云台控制。以下是四个步骤的详细设计: 1.室内场景视频流拍摄 使用海康威视球机摄像头进行室内视频流的实时拍摄。确保摄像头能覆盖整个室内空间,以便捕捉所…

springboot165科研工作量管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

MIMIC-IV官方视图解析 - AKI 肌酐 (kdigo_creatinine、kdigo_stages)

判断AKI我们可以通过肌酐和尿量两个指标来看, 今天我们主要提取肌酐。 kidgo指南的表格 AKI诊断标准:符合以下情况之一者即可被诊断为AKI:①48小时内Scr升高超过26.5μmol/L(0.3mg/dl);②Scr升高超过基线1.5倍——确认或推测为7…

windowsserver 2016 PostgreSQL9.6.3-2升级解决其安全漏洞问题

PostgreSQL 身份验证绕过漏洞(CVE-2017-7546) PostgreSQL 输入验证错误漏洞(CVE-2019-10211) PostgreSQL adminpack扩展安全漏洞(CVE-2018-1115) PostgreSQL 输入验证错误漏洞(CVE-2021-32027) PostgreSQL SQL注入漏洞(CVE-2019-10208) PostgreSQL 安全漏洞(CVE-2018-1058) …

过年DIY了个烟花给女朋友,给她惊喜得连夜翻出户口本

千百年来,烟花爆竹被看作是中国人春节的底色,绚烂弥漫的烟花,搭配噼里啪啦的爆竹声,人们在年味渐浓中享受团聚的欢乐。而近期烟花大师蔡国强的新作品–《海市蜃楼》,也让放烟花一时成为爆款视频的“流量密码”。但出于…

计算机视觉讲座PPT分享

最近在电子工业出版社做的《计算机视觉入门路线图》讲座的部分PPT。 主要介绍了计算机视觉的学习基本路线。

数据结构第十三天(树)

目录 前言 概述 树的基本概念: 树的相关操作 : 源码: 主函数: 运行结果: 往期精彩内容: 前言 2010年一部电影创造了奇迹,它是全球第一部票房到达 27 亿美 元,总票房历史 排名第…

MySQL篇----第十二篇

系列文章目录 文章目录 系列文章目录前言一、可以使用多少列创建索引?二、NOW()和 CURRENT_DATE()有什么区别?三、什么是非标准字符串类型?四、什么是通用 SQL 函数?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转…

docker之程序镜像的制作

目录 一、每种资源的预安装(基础) 安装 nginx安装 redis 二、dockerfile文件制作(基础) 打包 redis 镜像 创建镜像制作空间制作dockerfile 打包 nginx 镜像 三、创建组合镜像(方式一) 生成centos容器并…

AI新工具(20240206) Qwen1.5;法唠;Boximator 是由字节跳动研究团队开发的创新视频生成工具;秒画 等

Qwen1.5 - Qwen1.5更新了六种尺寸的基础和聊天模型,并在Hugging Face转换器集成了其代码,以提升开发者体验,并支持多种语言和长上下文处理。 Qwen1.5是一个大规模语言模型的最新迭代,它由Qwen团队开发。这个更新在中国新年前夕发…

如果品牌刚刚开始,切入私域社群团购,快团团是最好的选择

如果品牌刚刚开始,切入私域社群团购,快团团是最好的选择,借力新渠道社群团购,快团团,成就你的新品牌, 社群团购平台本身就有大量的信任你平台的流量,这个流量基数是巨大的。 你要知道的是&…