基于argparse三个store_true可选参数的代码逻辑咨询
优化你的argparse参数逻辑
嘿,我懂你现在的困扰——这段重复的if判断不仅写起来麻烦,以后要加新参数或者改逻辑也容易漏。咱们来把它变得更简洁、更易维护,同时完全保留你原本的业务逻辑:
先梳理你的核心需求
- 单独指定
-va/-vb/-vc时,运行对应变量的run_this_func - 如果没指定
higha/highb/highmem,就遍历所有变量执行函数 - 当
-va和-vb同时指定时,执行特殊逻辑
优化后的代码实现
首先用字典映射把参数和变量绑定,避免重复写if:
var_list = ['a', 'b', 'c'] # 建立参数名与对应变量的映射,以后加新参数直接加这里就行 param_var_map = { 'va': 'a', 'vb': 'b', 'vc': 'c' } # 处理单独指定参数的情况 for param_name, var in param_var_map.items(): if getattr(args, param_name): run_this_func(var) # 处理无high参数时的全量运行逻辑 if not args.higha and not args.highb and not args.highmem: for var in var_list: run_this_func(var) # 处理va和vb同时触发的特殊逻辑 if args.va and args.vb: run_this_other_function() # 替换成你的实际函数名
额外优化:避免重复执行
原逻辑里如果用户同时指定了-va且没有high参数,run_this_func('a')会被执行两次(一次单独判断,一次全量循环)。如果这不是你想要的,可以调整逻辑,优先执行指定参数的逻辑,无指定时再走全量:
var_list = ['a', 'b', 'c'] param_var_map = {'va': 'a', 'vb': 'b', 'vc': 'c'} # 检查是否有任何va/vb/vc被指定 any_param_selected = any(getattr(args, p) for p in param_var_map.keys()) if any_param_selected: # 只运行用户指定的参数对应的函数 for param_name, var in param_var_map.items(): if getattr(args, param_name): run_this_func(var) else: # 无指定参数时,检查是否需要全量运行 if not args.higha and not args.highb and not args.highmem: for var in var_list: run_this_func(var) # 特殊逻辑保留 if args.va and args.vb: run_this_other_function()
这样调整后,就不会出现重复执行的问题,逻辑也更清晰。
内容的提问来源于stack exchange,提问作者dissidia
相关产品推荐
相关产品推荐

