【问题标题】:How does argparse's add_argument take variable length arguments before keyword arguments?argparse 的 add_argument 如何在关键字参数之前采用可变长度参数?
【发布时间】:2011-05-25 16:20:10
【问题描述】:

在 python2.7 中,argparse 模块有一个 add_argument 方法,它可以在其关键字参数之前采用可变数量的未命名参数,如下所示:

parser = argparse.ArgumentParser(description='D')
parser.add_argument('-a', '-b', ... '-n', action='store', ... <other keyword args>)

据我所知,以下函数定义不起作用:

def fxn(var_args*, action, otherstuff):
def fxn(action, otherstuff, var_args*): # results in conflict on action

模拟add_argument 行为的正确方法是什么?

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    Python 的参数定义顺序是...

    1. 必需和/或默认值参数(如果有)
    2. 可变长度位置参数占位符(*&lt;name&gt; 如果需要)
    3. 关键字参数占位符(**&lt;name&gt; 如果需要)

    位置参数占位符得到一个列表,关键字参数占位符得到一个字典。

    add_arguments 只是在关键字参数的字典中查找键,而不是在声明中拼出所有可能的参数。类似的东西......

    def add_arguments(*posargs, **kwargs):
        if 'action' in kwargs:
            # do something
    

    【讨论】:

      【解决方案2】:

      您可以将任意数量的参数传递给函数。

      这是一个例子

      def f(x, *args, **kwargs):
          print x
          for arg in args:
              print arg
          for key, value in kwargs:
              print key + ': ' + value
      

      阅读本文会有所帮助:http://docs.python.org/tutorial/controlflow.html#keyword-arguments

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-10
        • 2011-08-21
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 2017-02-06
        • 1970-01-01
        • 2016-03-26
        相关资源
        最近更新 更多