ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

python的“if __name__==__main__”

2026/8/4 22:24:31 拓冰建站 浏览量
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)