if __name__ == “__main__“: 理解

news2024/11/16 2:32:38

if __name__ == "__main__": 是 Python 中常用的一种条件判断语句,主要作用是在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码

具体来说,当一个 Python 模块被导入时,Python 解释器会将该模块的文件名存储在内置变量 __name__ 中。如果该模块是主程序入口,则 __name__ 的值为字符串 "__main__",否则 __name__ 的值为该模块的文件名。

因此,当我们使用 if __name__ == "__main__": 进行条件判断时,只有当当前模块作为主程序入口时,才会执行 if 语句块内的代码。

这个语句的作用可以有以下几个方面:

  1. 模块测试:当我们新写一个模块时,可以在 if __name__ == "__main__": 语句块中编写测试代码,用于测试该模块的功能是否正确。

  2. 防止模块被导入时执行不必要的代码:有些模块在被导入时会自动运行一些代码,如果我们不希望这些代码在被导入时执行,可以把这些代码放到 if __name__ == "__main__": 语句块中。

  3. 方便调试: 在调试程序时,有时需要单独运行某个模块,此时将测试代码放在 if __name__ == "__main__": 语句块中可以方便地运行该模块。

综上所述,if __name__ == "__main__": 是一个常见的用法,可以帮助我们实现模块的测试、防止无用代码的执行和方便调试等。


1、对于存在if __name__ == "__main__":时候的代码执行顺序问题:

执行顺序是自上而下,不会先执行“__name__ == "__main__"”

# 执行顺序是自上而下,不会先执行“__name__ == "__main__"”

print("1、首先执行的位置")

def test_fun():
    print("我不会自己执行")

test_fun()

# 在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码
def main():
    print("3、最后执行的位置")


if __name__ == "__main__":
    print("2、再次执行的位置")
    main()

 输出为:

1、首先执行的位置
我不会自己执行
2、再次执行的位置
3、最后执行的位置

2、为什么使用if __name__ == "__main__":

test_main.py文件:

# 执行顺序是自上而下,不会先执行“__name__ == "__main__"”

print("1、首先执行的位置")

def test_fun():
    print("我不会自己执行")

test_fun()

# 在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码
def main():
    print("3、最后执行的位置")


if __name__ == "__main__":
    print("2、再次执行的位置")
    main()

other.py文件:

from test_main import test_fun

import test_main

 无论上面哪种调用test_main.py文件,都会执行下面的代码:

print("1、首先执行的位置")

def test_fun():
    print("我不会自己执行")

test_fun()

结果就是输出:

1、首先执行的位置
我不会自己执行

import该模块的时候就执行了在test_main.py文件中执行的函数“test_fun()”【不会执行只是定义def()而未调用的函数】,但是没有执行"main()",说明了if __name__ == "__main__"的作用:在当前模块作为程序入口时执行一些特定的代码,而在被其它模块引入时不执行这些特定的代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关注度拉满,RSAC 2023 热门安全工具速览

RSAConference2023于当地时间4月24日在旧金山正式拉开帷幕。自上届RSAC以来,网络安全行业发生了巨大的变化,尤其是以OpenAI聊天机器人为代表的内容生成型AI的兴起,对网络防御和攻击的影响比以往任何时候都更加明显。 今年,与RSAC相…

数据结构之第十章、Java对象的比较

目录 一、PriorityQueue(堆)中插入对象 二、元素的比较 2.1基本类型的比较 2.2对象比较的问题 三、对象的比较 3.1覆写基类的equals 3.2基于Comparble接口类的比较 3.3基于比较器比较 3.4三种方式对比 3.5代码实现 四、集合框架中PriorityQu…

大型医院影像PACS系统三维重建技术(获取数据、预处理、配准、重建和可视化)

PACS(Picture Archiving and Communication System)系统作为医学图像的存储和传输平台,为医生和患者提供了便捷高效的诊疗服务支持。近年来,三维重建技术在PACS系统中的应用越来越广泛。 一、三维重建技术的基本原理 在PACS系统…

JS 中的 performance,测量web应用性能

文章目录 属性和方法performance.memory 内存performance.navigation 页面的来源信息performance.timing 时间消耗相关时间计算Performance.mark()performance.now() Web Performance API 允许网页访问某些函数来测量网页和 Web 应用程序的性能 performance 包含如下属性和方法…

Linux基础IO【软硬链接与动静态库】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、软硬链接1.1、基本认知1.2、实现原理1.3、应用场景1.4、取消链接1.5、ACM时…

JavaWeb ( 一 ) HTTP协议

1.http协议 1.0.Web Web指的是World Wide Web,也称为万维网,是一种基于互联网的信息系统,由全球数百万个网站组成。它允许用户通过使用网页浏览器访问和交互信息,例如阅读新闻、购物、发送和接收电子邮件、社交媒体等。 Web使用…

解密.[support2022@cock.li].faust后缀勒索病毒加密的文件:拯救您的企业数据的完整指南!

引言: 您的企业数据是您业务的核心。但是,当.[support2022cock.li].faust后缀勒索病毒突袭您的系统时,您的数据将遭受沉重打击。这种恶意软件利用高级加密算法,将您的文件锁定在无法访问的状态。在这篇详细的指南中,9…

tcp/ip

这里写自定义目录标题 线程 防止阻塞 123 windows下4 https://zhuanlan.zhihu.com/p/139454200 https://www.bilibili.com/video/BV1eg411G7pW/?spm_id_from333.337.search-card.all.click&vd_sourcee7d12c9f66ab8294c87125a95510dac9 with socket.socket() as s:s.bind(…

xcode Swift Log CocoaLumberjack

参考【iOS】CocoaLumberJack日志库集成 - 简书 logging - How to capture Device Logs in iOS during Runtime into a file in Documents Directory from iPhone? - Stack Overflow GitHub - apple/swift-log: A Logging API for Swift 如何导出日志 方法一发邮件&#xf…

Vue——Elementui案例实现

需求分析: 对于上面要仿照的页面先新建一个页面组件EmpView.vue组件在views文件夹下 基本页面布局 对于上面页面的布局其实在Element当中也可以找到相应可以实现的组件, 成功找到一个符合要求的布局,直接复制粘贴到项目里面 此时页面相应的位置已经有了对应的占位单…

自动化运维工具 Ansible

目录 Puppet 自动运维工具特点: Saltstack 自动运维工具特点: Ansible 自动运维工具特点: Ansible 运维工具原理 Ansible 管理工具安装配置 Ansible 工具参数详解 Ansible ping 模块实战 Ansible command 模块实战 Ansible copy 模块实战 Ansib…

uboot第二阶段 start_armboot函数代码分析

1.1、start_armboot函数简介 这个函数整个构成了uboot启动的第二阶段。 1.2、uboot第二阶段做的事情 uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟、串口…),然后初始化DDR并且完成重定位。那么,uboot的第…

数字化转型导师坚鹏:企业数字化营销能力提升

企业数字化营销能力提升 课程背景: 很多企业存在以下问题: 不清楚数字化营销对企业发展有什么影响? 不知道如何提升企业数字化营销能力? 不知道企业如何开展数字化营销工作? 课程特色: 原创企业数…

vcruntime140.dll无法继续执行代码?vcruntime140.dll如何修复?只需要3步即可

vcruntime140.dll是用于Microsoft Visual C Redistributable(可再发行组件)的一部分,它是一个动态链接库文件,包含了该软件包提供的运行库。在许多应用程序和游戏中,vcruntime140.dll文件经常被使用。如果该文件缺失或…

Tkinter正则表达式工具

文章目录 🏳️‍🌈 1. 导入tkinter和re模块🏳️‍🌈 2. 设置窗口居中🏳️‍🌈 3. 设置lable、text、button布局🏳️‍🌈 4. 设置下拉列表框🏳️‍🌈 5. 清空文…

Scrum敏捷开发和项目管理流程及工具

Scrum是全球运用最广泛的敏捷管理框架,Leangoo基于Scrum框架提供了一系列的流程和模板,可以帮助敏捷团队快速启动Scrum敏捷开发。 这里可以介绍一下在scrum中单团队敏捷开发如何管理,单团队敏捷开发主要是针对10-15人以下,只有一…

零基础如何学习挖漏洞?看这篇就够了【网络安全】

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

Qt常用快捷键

Qt常用快捷键 1.添加头文件:Alt Enter2.查看槽函数的实现 位置:F2 / F43.快速查看帮助文档:F14.代码快速对齐:Ctrl I5.代码全选:Ctrl A6.保存:Ctrl S7.代码复制:Ctrl C8.代码粘贴&#xff…

Flutter之插件开发plugin

目的:适用于独立业务模块,或者与原生页面交互频繁的地方。 基于flutter3.x , IDE :androidStudio 步骤: 1.新建flutter project 【New flutter project】. 2. 在新建工程面板记得切换 Project Type, 选择【PLugin】. 其他的根据足迹需求选择就行。 3. 在flutter主工…

联想凌拓教育行业解决方案

联想凌拓教育行业解决方案 教育部等六部门《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》,指出:信息网络、平台体系、数字资源、智慧校园、创新应用、可信安全的新型基础设施为六大发展重点,需建立全面覆盖的标准规范体…