2011-11-01 61 views
23

这是一个真正的几个问题:命名空间,argparse和使用

  1. 是否有一个原因argparse使用一个命名空间,而不是一本字典的?

  2. 假设我有一门课__init__(self, init_method, *args)。参数init_method告诉init_function我想要初始化这个类,而arg参数给出了init的所有参数。对于不同的方法,参数可能会有所不同。我应该使用字典还是命名空间?

  3. 假设我使用命名空间,如何将命名空间传递给__init__()

回答

19
  1. arparse设计者显然认为这将是更方便地访问论据

    args.arg_name 
    

    而不是

    args["arg_name"] 
    

    这可能是一个品味的问题,虽然。我会很高兴地用字典,尤其是考虑到标准库中没有Namespace类,除了在​​中的类。

  2. 使用字典。

  3. 如果你真的想在这里命名空间,你可以使用init_function(**args.__dict__) ......但我不推荐它。

67

这是很容易使用vars()命名空间转换成词典:

>>> vars(args) 
+1

我使用这个,所以我可以有一个模块,它可以是一个独立的应用或功能。从argparse获取参数,我可以调用:my_func(** vars(parser.args)),只要我使我的参数名称与我在argparse中定义的名称匹配 –