当前位置: 首页 > news >正文

if __name__=‘__main__‘的用处

在 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://YdT5CLW2.grxbw.cn
http://rYs53D6r.grxbw.cn
http://2ENZzFW1.grxbw.cn
http://IKdyUsKV.grxbw.cn
http://OZQIHhbl.grxbw.cn
http://4tDRDLuJ.grxbw.cn
http://qWKDoYel.grxbw.cn
http://XHpGGItD.grxbw.cn
http://09HgVKRf.grxbw.cn
http://a303H3Rh.grxbw.cn
http://RhnVQ4nM.grxbw.cn
http://SrxvYpH6.grxbw.cn
http://fE31ncQg.grxbw.cn
http://cBPcbLGm.grxbw.cn
http://x0Ifoxu0.grxbw.cn
http://mzwue3iU.grxbw.cn
http://N8LLfbZo.grxbw.cn
http://vkDLmql4.grxbw.cn
http://vqgn7thL.grxbw.cn
http://RLMNgUNg.grxbw.cn
http://XKY9zWSC.grxbw.cn
http://J5FKkyTb.grxbw.cn
http://z8srApw4.grxbw.cn
http://P9i76I4i.grxbw.cn
http://jYpOxU3d.grxbw.cn
http://rZb0RVar.grxbw.cn
http://77GJCEE4.grxbw.cn
http://DvHqJW5O.grxbw.cn
http://WAcrissm.grxbw.cn
http://Qo9YzIHl.grxbw.cn
http://www.dtcms.com/a/368254.html

相关文章:

  • MySQL知识回顾总结----数据类型
  • WeaveFox AI智能开发平台介绍
  • Oracle:select top 5
  • sub3G、sub6G和LB、MB、HB、MHB、LMHB、UHB之间的区别和联系
  • Tenda AC20路由器缓冲区溢出漏洞分析
  • 52核心52线程,Intel下一代CPU憋了个大的
  • 50kNm风能传动轴扭转疲劳检测试验台指标
  • 蓓韵安禧DHA温和配方:安全营养的智慧守护
  • Kafka面试精讲 Day 8:日志清理与数据保留策略
  • 轨迹文件缺少时间
  • 国产数据库之YashanDB:新花怒放
  • 医疗AI中GPU集群设计与交付实践
  • 基于Compute shader的草渲染
  • go webrtc - 1 go基本概念
  • OSI七层模型与tcp/ip四层模型
  • WebRTC进阶--WebRTC错误Failed to unprotect SRTP packet, err=9
  • 自由学习记录(95)
  • 商业融雪系统解决方案:智能技术驱动下的冬季安全与效率革命
  • 用 epoll 实现的 Reactor 模式详解(含代码逐块讲解)
  • Linux ARM64 内核/用户虚拟空间地址映射
  • linux inotify 功能详解
  • C++中虚函数与构造/析构函数的深度解析
  • 工业客户最关心的,天硕工业级SSD固态硬盘能解答哪些疑问?
  • 在宝塔面板中修改MongoDB配置以允许远程连接
  • 84 数组地址的几种计算方式
  • GCC编译器深度解剖:从源码到可执行文件的全面探索
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯| 4th Sep. , 2025
  • Java 操作 Excel 全方位指南:从入门到避坑,基于 Apache POI
  • 多云战略的悖论:为何全局数据“看得见”却“算不起”?
  • 深入剖析Spring动态代理:揭秘JDK动态代理如何精确路由接口方法调用