Python中如何通过参数动态切换列表in/not in判断实现代码复用
可复用报告生成逻辑实现方案
完全可以通过参数化筛选规则的方式复用同一套逻辑,不需要维护两份重复代码,以下是两种常用实现方式:
方式1:布尔开关参数(适配当前固定两种筛选规则的场景)
把「是否包含指定两个产品」作为布尔类型参数传入通用函数,内部根据参数值切换筛选判断逻辑,其余报告处理逻辑完全复用,示例代码(Python)如下:# 固定配置需要特殊处理的产品列表 SPECIFIED_PRODUCTS = ["Product 1", "Product 2"] def generate_report(include_specified: bool): # 以下为两份报告完全一致的前置处理逻辑 source_data = load_business_data() cleaned_data = data_cleaning(source_data) # 仅筛选逻辑根据参数切换 if include_specified: report_data = [item for item in cleaned_data if item["product_name"] in SPECIFIED_PRODUCTS] else: report_data = [item for item in cleaned_data if item["product_name"] not in SPECIFIED_PRODUCTS] # 以下为两份报告完全一致的后续逻辑:指标计算、排版渲染、文件导出等 metrics = calculate_report_metrics(report_data) render_and_export(metrics) # 调用示例 generate_report(include_specified=True) # 生成报告1:仅包含Product1、Product2 generate_report(include_specified=False) # 生成报告2:排除Product1、Product2方式2:传入筛选谓词函数(扩展性更强,适配后续规则变更场景)
直接把判断产品是否符合纳入范围的判断函数作为参数传入,核心报告逻辑不需要感知具体筛选规则,后续新增其他筛选范围的报告时不需要修改核心函数代码,示例代码如下:def generate_report(product_match_rule): # 通用前置处理逻辑 source_data = load_business_data() cleaned_data = data_cleaning(source_data) # 统一调用传入的规则函数做筛选 report_data = [item for item in cleaned_data if product_match_rule(item)] # 通用后续处理逻辑 metrics = calculate_report_metrics(report_data) render_and_export(metrics) # 调用示例 generate_report(lambda x: x["product_name"] in ["Product 1", "Product 2"]) # 生成报告1 generate_report(lambda x: x["product_name"] not in ["Product 1", "Product 2"]) # 生成报告2
两种方式都可以完全消除重复代码,后续修改报告逻辑时只需要调整一次通用函数即可,避免两份代码逻辑不一致的问题。如果后续没有新增其他筛选规则的需求,用第一种布尔开关的方式更简单直观;如果后续可能扩展更多报告范围,第二种函数传参的方式灵活度更高。
内容的提问来源于stack exchange,提问作者Sunil Shukla
相关产品推荐
相关产品推荐

