代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

为什么parseargs将参数存储在列表中

  •  0
  • CIsForCookies  · 技术社区  · 7 年前

    def f():
        return 'dummy2'
    
    p = argparse.ArgumentParser()
    p.add_argument('--a', nargs=1, type=str)
    p.add_argument('--b', nargs='?', const=f(), default=f())
    p.parse_args('--a dummy'.split())
    

    解析器名称空间是 Namespace(a=['dummy'], b='dummy2')

    我怎样才能为你辩护 a 是否存储为字符串而不是字符串列表?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    这很简单,只要跳过这个论点就可以了 nargs . 试试这个:

    p = argparse.ArgumentParser()
    p.add_argument('--a', type=str)
    p.add_argument('--b', nargs='?', const=f(), default=f())
    

    我相信这正是你所期望的:

    p.parse_args('--a dummy'.split())
    => Namespace(a='dummy', b='dummy2')
    

    引用 docs

    ArgumentParser对象通常将单个命令行参数与要执行的单个操作相关联。nargs关键字参数将不同数量的命令行参数与单个操作相关联。支持的值包括:

    N(整数)。命令行中的N个参数将被收集到一个列表中。。。请注意,nargs=1生成一个项目列表。这与默认情况不同,默认情况下,项目由自身生成。