Python argparse.ArgumentParser-选项名称以数字开头



我正在尝试添加一个以数字开头的选项,例如,此处的--3d

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--3d", action="store_true")
args = parser.parse_args(['--3d'])
print(args)

parser工作得很好,但args看起来像这样,我不知道如何获得值:

Namespace(**{'3d': True})

我试过args.3dargs("3d")args["3d"]args{"3d"}等,但都不起作用。

我知道我可以在add_argument()中添加dest来解决这个问题,但我仍然想学习如何在**{}中获取数据。

想想

Namespace(**{'3d': True})

作为显示其名称不是有效属性的值的一种方式。

"3d"可以用作dict密钥,如在vars(args)['3d']中一样。

getattrargparse内部使用的通用访问器。

另一个选项是使用dest设置不同的名称。

你尝试的东西是错误的,因为:

args.3d  # bad attribute name
args("3d")  # args is not a function
args["3d"]  # args is not a dict
args{"3d"}  # bad syntax

**语法确实适用于创建argparse.Namespace对象,但它不是我们通常使用的东西:

In [152]: argparse.Namespace(foo='bar')
Out[152]: Namespace(foo='bar')
In [153]: argparse.Namespace(foo='bar', **{'3d':'x'})
Out[153]: Namespace(foo='bar', **{'3d': 'x'})
In [154]: getattr(_, '3d')
Out[154]: 'x'
In [155]: vars(__)
Out[155]: {'foo': 'bar', '3d': 'x'}
In [156]: _['3d']
Out[156]: 'x'

基本上,argparse在一个简单的Namespace类对象中返回值,该对象为有效名称提供了方便的属性访问,但也允许用户使用混乱的名称。但细节归结为什么是有效的Python。

最新更新