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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:15:56