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

python的“if __name__==__main__”

这是一个 Python 模块入口点的判断,用来区分这个文件是被直接运行还是被导入为模块。
基本解释
if name == "main":
# 这里的代码只有在直接运行这个文件时才会执行
# 如果这个文件被其他文件导入,这里的代码不会执行
简单理解
你可以把 if name == "main":理解为:
"如果我是主程序"​ 或
"如果我自己运行自己"
举个例子就明白了
文件1:my_module.py
def hello():
print("你好,我是 my_module!")

def calculate(a, b):
return a + b

这个判断很重要!

if name == "main":
# 只有直接运行 my_module.py 时,才会执行这里的代码
print("=== 测试 my_module =")
hello()
result = calculate(10, 20)
print(f"10 + 20 = {result}")
print("
= 测试结束 ===")
文件2:main_program.py

导入 my_module

import my_module

print("=== 主程序开始 ===")

使用 my_module 中的函数

my_module.hello()
result = my_module.calculate(5, 3)
print(f"5 + 3 = {result}")

print("=== 主程序结束 ===")
运行结果
情况1:直接运行 my_module.py
python my_module.py
输出:
=== 测试 my_module ===
你好,我是 my_module!
10 + 20 = 30
=== 测试结束 ===
情况2:运行 main_program.py
python main_program.py
输出:
=== 主程序开始 ===
你好,我是 my_module!
5 + 3 = 8
=== 主程序结束 ===

为什么需要这个?

  1. 模块的测试代码

math_utils.py

def add(a, b):
return a + b

def multiply(a, b):
return a * b

测试代码 - 只有直接运行这个文件时才测试

if name == "main":
# 测试 add 函数
print(f"测试 add: 2 + 3 = {add(2, 3)}")

# 测试 multiply 函数
print(f"测试 multiply: 2 * 3 = {multiply(2, 3)}")# 更多测试...
  1. 可复用的脚本

data_processor.py

import pandas as pd

def process_data(input_file, output_file):
"""处理数据的主要逻辑"""
df = pd.read_csv(input_file)
# ... 数据处理 ...
df.to_csv(output_file, index=False)
print(f"数据处理完成,保存到 {output_file}")

允许两种使用方式:

1. 作为模块导入:from data_processor import process_data

2. 作为脚本运行:python data_processor.py input.csv output.csv

if name == "main":
import sys
if len(sys.argv) != 3:
print("用法: python data_processor.py 输入文件 输出文件")
sys.exit(1)

input_file = sys.argv[1]
output_file = sys.argv[2]
process_data(input_file, output_file)

底层原理
__name__是 Python 的一个特殊变量,表示当前模块的名字:
如果文件是主程序(直接运行),__name__的值是 "main"
如果文件是被导入的模块,__name__的值是模块名(文件名去掉 .py)

http://www.jsqmd.com/news/719069/

相关文章:

  • 打破语言壁垒:揭秘RTranslator如何用本地AI实现离线实时翻译
  • DOTS 2.0性能调优黄金 checklist(含17项必检项、8处反模式代码、3个被低估的IL2CPP生成缺陷)——来自为《星穹铁道》PC版提供底层优化支持的架构组内部文档
  • 2026年自动分选秤厂家推荐榜:重量分选秤/高精度分选秤/流水线分选秤/智能分选秤/选择指南 - 品牌推荐大师1
  • 5分钟学会永久保存B站缓存视频:m4s-converter完整使用指南
  • 动手模拟5G小区搜索:用Python/MATLAB复现PSS/SSS检测与PCI识别流程
  • python MANIFEST.in
  • dstack:本地AI计算集群的高效管理工具
  • DLSS Swapper技术架构深度解析:多平台游戏DLSS文件管理系统的设计与实现
  • Tesseract-OCR不止于安装:在Windows上用Python调用它,实现批量图片转文本的自动化脚本
  • AI时代后端架构的“围栏”哲学:如何用约束驯服智能体的随机性
  • 代码审查文化:建设性反馈与知识传播的结合
  • VS Code Markdown Preview Enhanced 深度指南:从技术文档到交互式演示的完整解决方案
  • DV170E0M-N30京东方液晶屏代理17寸LCD显示屏LVDS接口参数
  • 2026年4月防爆电子秤哪家性价比高?国产防爆电子秤/防爆秤源头工厂/防爆电子秤厂家直销选择指南 - 品牌推荐大师1
  • 为智能体装上“实时百科全书”:RAG 如何打破 AI 的知识边界?
  • Docker 学习1 - 入门基础篇
  • 从“对话者”到“执行者”:AI Agent 产品设计与系统架构深度研究
  • 告别下载!给Ecology9流程表单附件加个“直接打印”按钮(附完整Ecode代码)
  • 铭饮食品:奶茶原料源头/茶饮供应链一站式服务/奶茶咖啡店免费培训/奶茶原料批发/奶茶咖啡原料出口公司,布局广东广州等地区,赋能茶饮行业升级 - 十大品牌榜
  • 智慧职教刷课脚本:3分钟解放你的在线学习时间
  • 解锁群晖NAS网络性能:Realtek USB网卡驱动的深度配置指南
  • 终极游戏模组加载器:3分钟学会安装任何游戏插件
  • CSS随笔记
  • 浏览器P2P文件传输终极指南:5分钟掌握FilePizza完整解决方案
  • Platinum-MD:终极解决方案!如何让古董MiniDisc设备重获新生?
  • OPRF技术如何增强FIDO2多设备认证安全性
  • 别再只用border-radius了!用CSS radial-gradient实现Chrome标签页同款反向圆角
  • 拉萨装配式建筑首选方案:西藏藏建科技vs中国建筑、万科、碧桂园、中铁建工深度对比 - 优质企业观察收录
  • 从理论到代码:拆解ORB-SLAM中‘关键帧’与‘地图点’管理的那些精妙设计
  • 3分钟掌握GPU内存检测:MemtestCL终极指南与实战技巧