You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化带依赖步骤的DataFrame文本报告生成代码?

优化步骤依赖型任务的代码结构(减少嵌套IF)

原代码通过多层嵌套IF处理"前一步无结果则终止后续步骤"的依赖逻辑,但嵌套过深导致可读性差、维护成本高。下面提供两种优化方案:

方案一:步骤流水线式执行(推荐,扩展性强)

将所有步骤按顺序存入列表,循环执行时自动判断是否终止后续步骤,同时统一收集结果。这种方式彻底消除嵌套,且新增步骤只需修改配置列表,无需调整执行逻辑。

import pandas as pd

# 模拟业务步骤函数(根据实际需求替换)
def find_stuff():
    return pd.DataFrame({'col1': [1, 2]})

def find_new_stuff():
    return pd.DataFrame({'col2': [3, 4]})

def find_new_stuff_again():
    return pd.DataFrame({'col3': [5, 6]})

# 步骤配置:按执行顺序定义(步骤名称,对应执行函数)
steps_config = [
    ("step_1", find_stuff),
    ("step_2", find_new_stuff),
    ("step_3", find_new_stuff_again)
]

# 执行步骤并收集结果
step_results = {}
for step_name, step_func in steps_config:
    current_df = step_func()
    step_results[step_name] = current_df
    if current_df.empty:
        # 后续步骤不执行,用空DataFrame填充
        remaining_steps = [name for name, _ in steps_config if name not in step_results]
        for name in remaining_steps:
            step_results[name] = pd.DataFrame()
        break

# 生成报告函数
def write_report(results):
    # 使用with语句自动管理文件资源,避免泄漏
    with open("report.txt", "a") as report_file:
        if results["step_1"].empty:
            report_file.write('Nothing was found \n')
            return
        
        # 按顺序写入所有有数据的步骤
        for step_name, df in results.items():
            if not df.empty:
                report_file.write(f'Here what was found for {step_name} \n : {df} \n')

# 触发报告生成
write_report(step_results)

方案优势:

  • 彻底消除多层嵌套IF,代码结构扁平化,可读性大幅提升
  • 扩展性极强:新增步骤只需在steps_config列表中添加条目,无需修改执行逻辑
  • 结果统一用字典存储,便于后续扩展其他处理逻辑
  • 用with语句管理文件,自动关闭,避免资源泄漏

方案二:卫语句提前返回(适合步骤固定的场景)

如果步骤数量固定且较少,可以用"卫语句"(提前返回)替代嵌套,每一步检查后若为空则直接生成报告并终止流程,避免嵌套层级。

import pandas as pd

# 模拟业务步骤函数
def find_stuff():
    return pd.DataFrame({'col1': [1, 2]})

def find_new_stuff():
    return pd.DataFrame({'col2': [3, 4]})

def find_new_stuff_again():
    return pd.DataFrame({'col3': [5, 6]})

def write_report(step1, step2, step3):
    with open("report.txt", "a") as f:
        if step1.empty:
            f.write('Nothing was found \n')
            return
        f.write(f'Here what was found for step 1 \n : {step1} \n')
        
        if step2.empty:
            return
        f.write(f'Here what was found for step 2 \n : {step2} \n')
        
        if step3.empty:
            return
        f.write(f'Here what was found for step 3 \n : {step3} \n')

# 执行流程
step1 = find_stuff()
if step1.empty:
    write_report(step1, pd.DataFrame(), pd.DataFrame())
    exit()

step2 = find_new_stuff()
if step2.empty:
    write_report(step1, step2, pd.DataFrame())
    exit()

step3 = find_new_stuff_again()
write_report(step1, step2, step3)

方案优势:

  • 每一步逻辑独立,避免嵌套层级
  • 代码简洁直观,适合步骤数量固定的场景

内容的提问来源于stack exchange,提问作者Tartinette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:12:45