如何在python中自动传递大量的关键字参数

时间:2016-11-12 11:51:32

标签: python parameter-passing

我正在调用一个函数

foo(x,y0=y[0],y1=y[1],y2=y[2],...,y<d>=y[<d>])

其中<d>是一个较大的数字,可能因呼叫而异。除x外的所有参数都是关键字参数。 我自己没有写foo,所以我不能只将y作为列表传递。是否有自动方式将列表拆分为关键字参数?

3 个答案:

答案 0 :(得分:5)

首先,构建名称,值对的列表,然后将其转换为字典并将其传递给函数。

y_vals = [ 1, 2, 3, 'a', 'b', 'c' ]
arg_dict = dict(('y%d' % i, v) for i, v in enumerate(y_vals))
foo(x, **arg_dict)

答案 1 :(得分:2)

使用*从列表中传递解压缩的参数,您可以使用普通参数代替关键字参数,只需确保以正确的顺序传递它们,例如:

def foo(x, y1=None, y2=None, y3=None, y4=None, ... , yN=None):
  # func stuff

您可以将列表传递给函数 unpacked ,例如:

arguments = ["arg-y1", "arg-y2", "arg-y3", ... , "arg-yN"]
foo (x, *arguments)

由于它们是关键字参数,因此它们将具有一些默认值。 如果您只想传递几个特定值,可以使用Dictionary**代表kw:

kwargs = {"y1": "arg-y1", "y3": "arg-Y3" }
foo (x, **kwargs)

答案 2 :(得分:2)

您可以使用Dropzone.autoDiscover = false让您的函数使用任意数量的关键字参数(“kwargs”表示“关键字参数”):

**kwargs

通过构造关键字参数字典并将其传递给函数,调用函数时,也可以使用>>> def print_keyword_args(**kwargs): ... # kwargs is a dict of the keyword args passed to the function ... for key, value in kwargs.iteritems(): ... print "%s = %s" % (key, value) ... >>> print_keyword_args(first_name="John", last_name="Doe") first_name = John last_name = Doe 语法:

**kwargs

Python Tutorial包含一个很好的解释,它包含一些不错的例子。

对于将列表转换为关键字参数的情况:

>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith