所提出的问题存在一些误解,或者我有一个大误解。
*keyword 和 **keyword 用于将参数/内容传递给 Python 代码内部的类/函数/方法。
argparse 用于从外部/命令行向 Python 程序传递参数/选项。因此,您不会得到一对一的复制。但是 argparse 是非常可配置的,根据您的需要,您可以做到接近。
如果您只想传递一个名称,那么:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
args = parser.parse_args()
print args
让您能够:
$ ./pytest.py dave
Namespace(name='dave')
如果你想设置名称,这样你也可以发送其他材料:
parser.add_argument("-name")
让你能够:
./pytest.py -name dave
Namespace(name='dave')
但请注意:
./pytest.py -name dave -name steve
Namespace(name='steve')
然而:
parser.add_argument("--name")
允许/要求:
./pytest.py --name dave
Namespace(name='dave')
./pytest.py --name=dave
Namespace(name='dave')
如果你:
parser.add_argument("--name", nargs="+")
./pytest.py --name dave steve murphy
Namespace(name=['dave', 'steve', 'murphy'])
但是:
./pytest.py --name=dave --name=steve --name=murphy
Namespace(name= ['murphy'])
(请注意,最后一个列表中只有Murphy。)
因此,您可以这样做:
parser.add_argument("--name")
parser.add_argument("--email")
parser.add_argument("--hair-color")
./pytest.py --name fred --hair-color murphy --email example@example.com
Namespace(email='example@example.com', hair_color='murphy', name='fred')