我从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中设置默认值,但我想使用方法定义中设置的默认值.
使用带有 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)