[英]Using argparse arguments as keyword arguments
假设使用argparse解析命令行后,我有了一个args
命名空间。 现在,我想用它来创建一些这样的对象:
foo = Foo(bar=args.bar)
不幸的是,我有一个限制,即如果设置了关键字参数,则它不能为None
。 现在,我需要检查是否设置了args.bar
并采取相应措施:
if args.bar:
foo = Foo(bar=args.bar)
else:
foo = Foo()
这很麻烦,无法扩展更多的参数。 我想要的是这样的:
foo = Foo(**args.__dict__)
但这仍然困扰着我最初的问题,并且对于不是__init__
方法的关键字参数的键也不起作用。 有没有实现这些目标的好方法?
您可以尝试这样的事情:
>>> defined_args = {k:v for k,v in args._get_kwargs() if v is not None}
>>> foo = Foo(**defined_args)
例如:
>>> import argparse
>>> args = argparse.Namespace(key1=None,key2='value')
>>> {k:v for k,v in args._get_kwargs() if v is not None}
{'key2': 'value'}
但是请注意, _get_kwargs()
不是公共API的一部分,因此在将来的发行版/版本中可能可用,也可能不可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.