繁体   English   中英

使用argparse参数作为关键字参数

[英]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的一部分,因此在将来的发行版/版本中可能可用,也可能不可用。

我认为您可以使用vars()

args = parser.parse_args()
Foo(**vars(args))

vars([object])返回名称空间作为字典

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM