在 Python 中,if __name__ == '__main__':是一个常见的代码模式,用于控制模块的执行行为。它的核心作用是区分模块是被直接运行还是被导入到其他文件中

作用详解:

  1. 当文件被直接运行时

    __name__会被自动设置为 '__main__',此时 if块内的代码会执行。

  2. 当文件被导入时

    __name__会变成模块的名称(即文件名),此时 if块内的代码不会执行


实际用途:

1. 防止导入时执行测试代码
# mymodule.py
def useful_function():print("This is useful!")# 测试代码(只在直接运行时执行)
if __name__ == '__main__':print("Running tests...")useful_function()
  • 直接运行 python mymodule.py→ 输出测试结果

  • 其他文件导入 import mymodule→ 不会触发测试代码

2. 创建可复用模块
# utils.py
def helper():print("Helper function")if __name__ == '__main__':# 直接运行时提供命令行操作print("Running in CLI mode")helper()
  • 作为模块导入时:只提供 helper()函数

  • 直接运行时:变成命令行工具

3. 分离代码逻辑
# main.py
import data_processordata = load_data()
processed = data_processor.process(data)  # 导入时不触发执行if __name__ == '__main__':save_results(processed)  # 只有直接运行时保存结果

技术原理:

  • Python 解释器在运行文件时,会创建一个特殊变量 __name__

  • 直接运行时:__name__ = "__main__"

  • 被导入时:__name__ = "模块名"(如 "mymodule"

最佳实践:

✅ 将脚本的入口代码放在 if __name__ == '__main__':

✅ 模块的核心功能定义在外部函数中

❌ 避免在模块顶层写直接执行的代码(除非明确需要)

📌 ​关键总结​:这个结构让 Python 文件既能作为独立程序运行,又能作为模块被安全导入,是 Python 模块化编程的基础设计模式。

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

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

相关文章

MySQL慢查询优化策略

一、问题定位 1、慢查询日志 -- 查看当前设置 SHOW VARIABLES LIKE slow_query%; ​ -- 开启慢查询日志(my.cnf永久配置) [mysqld] slow_query_log 1 slow_query_log_file /var/log/mysql/slow.log long_query_time 1 -- 超过1秒的查询 log_querie…

如何使用 ASP.NET Core 创建基于角色的 Web API

在使用 ASP.NET Core 构建基于角色的 Web API 时,代码优先方法是一种强大而高效的方法。使用它,我们可以在代码中定义数据模型和关系,然后自动生成相应的数据库模式。这会带来什么?当然是更快的开发周期和更大的灵活性。为什么&am…

无字母数字命令执行

写在前面 说白了数字还是好构造的,bash的算数拓展! base64命令 这玩意说白了有点鸡肋,因为你得知道flag的文件名和位置! base64 flag.php这个会将flag.php里面的内容给base64编码输出来。那么如何用无字母数字构造呢? …

AAB包转apks转apk

1. 下载bundletool-all-1.17.2.jar(不一定非得1.17.2,可以其他版本) https://github.com/google/bundletool/releases/tag/1.17.2 2. 在aab、keystore、bundletool-all-1.17.2.jar的目录下,运行指令 java -jar bundletool-all-1…

从零开始:用uv构建并发布一个Python CLI应用,集成CI/CD自动化发布与Docker容器化部署

使用uv构建并发布一个完整的Python CLI应用 概述 初始化项目 编写应用代码 定义项目 (`pyproject.toml`) 使用`uv`安装依赖 本地运行和测试 依赖锁定 构建 发布 生产环境实践之CI/CD 创建工作流配置文件 配置GitHub Secrets 创建和推送tag 验证发布 生产环境实践之Docker 创建D…

如何在Qt中使用周立功USB转CAN卡

如何在 Qt 中使用周立功 USB 转 CAN 卡 文章目录如何在 Qt 中使用周立功 USB 转 CAN 卡一、简介二、准备工作三、使用四、运行效果五、写在最后​一、简介 最近在工程中用到了周立功的 USB 转 CAN 卡,需求是要通过上位机进行通信,因此有了这篇文章。 有…

JavaScript 源码剖析:从字节码到执行的奇妙旅程

JavaScript,这门风靡全球的脚本语言,以其灵活性和跨平台性征服了无数开发者。我们每天都在使用它,但它在后台是如何工作的?一段看似简单的JS代码,在执行之前究竟经历了哪些“变形记”?今天,让我…

FPGA—硬件电路一旦上电配置完成,各个功能模块会并行地持续工作

1.示例代码参考这段代码是用 Verilog 编写的一个 LED 闪烁控制模块,主要实现了 LED 按一定时间间隔循环移位闪烁的功能。下面详细解释其架构组成:模块定义与端口声明模块名为 led_flash,包含三个端口:sys_clk:输入端口…

从零到上线:Docker、Docker Compose 与 Runtime 安装部署全指南(含实战示例与应用场景)

文章目录一、Docker 安装1. Ubuntu / Debian(官方仓库)2. RHEL / CentOS / Rocky / AlmaLinux3. 验证4. macOS / Windows(Docker Desktop)二、Docker Compose(V2)安装与基本用法1) 验证2) 最小示例&#xf…

Java基础篇02:基本语法

1 注释 注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的。注释分为三种:单行注释、多行注释、文档注释注释不影响代码的执行: 原因是编译后的文件已经没有注释了// 这是单行注释:。通常…

【SECS/GEM 】SECS/GEM 日志管理相关的消息

明白 ✅ 在 SECS/GEM 架构里,设备日志(Equipment Logging 主要涉及 事件日志(Event Log)、报警日志(Alarm Log)、配方操作日志(Recipe Log)、以及用户操作/命令日志。这些日志通过 S…

ragas 框架使用Chat-GLM模型报API 调用参数有误,请检查文档

ragas 框架使用Chat-GLM模型报API 调用参数有误,请检查文档解决方案 from ragas.llms import LangchainLLMWrapper # 点击LangchainLLMWrapper 进入这个类找到这个方法直接 return 0.1出现问题原因 ChatGLM 不支持设置temperature等于0,默认的值太小了

Kaggle - LLM Science Exam 大模型做科学选择题

Kaggle - LLM Science Exam Science Exam Simple Approach w/ Model Hub | Kaggle Platypus2-70B with Wikipedia RAG | Kaggle 5个选项只有一个选项正确,目标:回答一个选项序列(只有前三个有效) 输出正确选项 (可…

贪吃蛇鱼小游戏抖音快手微信小程序看广告流量主开源

核心优势:为流量主运营者与新手量身打造 1. 为流量主运营者破解成本困局 本地化运行,零服务器成本:数据运行与存储全程在用户手机本地完成,无需部署服务器及后台系统,彻底摆脱服务器租赁、维护等硬性支出,…

PDF Reader 编辑阅读工具(Mac中文)

原文地址:PDF Reader 编辑阅读 for Mac v5.2.0 PDF Reader Pro Mac,是一款PDF编辑阅读,PDF Reader Pro让您直接在 Mac 上进行PDF文件阅读、笔记、编辑、转换、创建PDF、签署PDFs、填写PDF Forms表单、设置密码、合并拆分文件、水印等等&…

Django REST framework:SimpleRouter 使用指南

1. SimpleRouter 是什么? SimpleRouter 是 DRF(Django REST framework)提供的路由器,能根据 ViewSet 自动生成标准的 REST 路由,包括: GET /resources/ → 列表(list)POST /resource…

覆盖Transformer、GAN:掩码重建正在重塑时间序列领域!

随着大数据与深度学习的发展,时间序列分析的建模能力显著提升,而掩码重建作为一种自监督学习范式,已成为提升序列表征能力的重要技术。该方法通过随机掩码部分数据并重建原始序列,迫使模型挖掘时序依赖性与潜在模式,在…

用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!

多语种解说: 短剧出海狂吸美金 多语种解说抢先机 TikTok、YouTube等平台,尤其在非英语市场,内容供给仍远远不足,每一个小语种市场都是潜在蓝海。 有人用英语讲仙侠、西语讲爽剧、日语讲宫斗、阿语讲悬疑,一夜涨粉百…

解密大语言模型推理:输入处理背后的数学与工程实践

解密大语言模型推理:输入处理背后的数学与工程实践当你向ChatGPT提问时,短短几秒内就能获得流畅的回答,这背后隐藏着怎样的技术魔法?答案在于大语言模型高效推理过程中精妙的输入处理机制。在现代大语言模型推理中,输入…

02、连接服务器的几种方式

02、连接服务器的几种方式 1、Xshell 适用于Windows https://www.xshell.com/en/free-for-home-school/ 2、Termius 适用于MacOS 直接苹果商店下载即可 3、IDEA 连接 Tools - Deployment - Browse Remote Host 1、打开Browse Remote Host2、添加服务3、输入服务器连接信息并测试…