有条件地将参数传递给python中的方法

Cat*_*way 5 python

我从argparse有很多可能的参数,我想传递给一个函数.如果尚未设置变量,我希望该方法使用其默认变量.但是,处理哪些参数已经设置,哪些参数没有繁琐:

import argparse
def my_func(a = 1, b = 2):
  return a+b

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Get the numeric values.')
    parser.add_argument('-a', type=int)
    parser.add_argument('-b', type=int)
    args = parser.parse_args()

    if not args.a is None and not args.b is None:
        result = my_func(a = args.a, b = args.b)
    elif not args.a is None and args.b is None:
        result = my_func(a = args.a)
    elif not args.b is None and args.a is None:
        result = my_func(b = args.b)
    else:
        result = my_func()
Run Code Online (Sandbox Code Playgroud)

看起来我应该可以这样做:

result = my_func(a = args.a if not args.a is None, b = args.b if not args.b is None)
Run Code Online (Sandbox Code Playgroud)

但这会在逗号上出现语法错误.

我可以在argparser中设置默认值,但我想使用方法定义中设置的默认值.

Dan*_*man 4

使用带有 kwargs 解包语法的字典。

args = parser.parse_args()
result = my_func(**vars(args))
Run Code Online (Sandbox Code Playgroud)

编辑

使用SUPPRESSArgumentParser 的参数删除空值:

parser = argparse.ArgumentParser(description='Get the numeric values.',
                                 argument_default=argparse.SUPPRESS)
Run Code Online (Sandbox Code Playgroud)