这是一个真正的几个问题:命名空间,argparse和使用
是否有一个原因argparse使用一个命名空间,而不是一本字典的?
假设我有一门课
__init__(self, init_method, *args)
。参数init_method
告诉init_function我想要初始化这个类,而arg
参数给出了init的所有参数。对于不同的方法,参数可能会有所不同。我应该使用字典还是命名空间?假设我使用命名空间,如何将命名空间传递给
__init__()
?
这是一个真正的几个问题:命名空间,argparse和使用
是否有一个原因argparse使用一个命名空间,而不是一本字典的?
假设我有一门课__init__(self, init_method, *args)
。参数init_method
告诉init_function我想要初始化这个类,而arg
参数给出了init的所有参数。对于不同的方法,参数可能会有所不同。我应该使用字典还是命名空间?
假设我使用命名空间,如何将命名空间传递给__init__()
?
的arparse
设计者显然认为这将是更方便地访问论据
args.arg_name
而不是
args["arg_name"]
这可能是一个品味的问题,虽然。我会很高兴地用字典,尤其是考虑到标准库中没有Namespace
类,除了在中的类。
使用字典。
如果你真的想在这里命名空间,你可以使用init_function(**args.__dict__)
......但我不推荐它。
这是很容易使用vars()到命名空间转换成词典:
>>> vars(args)
我使用这个,所以我可以有一个模块,它可以是一个独立的应用或功能。从argparse获取参数,我可以调用:my_func(** vars(parser.args)),只要我使我的参数名称与我在argparse中定义的名称匹配 –