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
=== 主程序结束 ===

为什么需要这个?

模块的测试代码

# 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)}")
    
    # 更多测试...

可复用的脚本

# 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)
posted @ 2026-04-29 12:17  MKYC  阅读(6)  评论(0)    收藏  举报