如何在变量中为python函数构建参数

时间:2015-03-11 12:36:19

标签: python python-3.x

我有一个Python(3)函数

def f(a, b, c=1, d=2):
    pass

我想在代码中建立一个参数列表。实际的用例是基于一些命令行参数解析来做到这一点,但它是一个普遍的问题(我对python来说相当新),例如。

myargs = {}
myargs['positionalParams'] = ['foo', 'bar']
myargs['c']=2
myargs['d']=3
f(myargs)

我知道我可以f(*somelist)将列表扩展为单独的args,但如何通过混合使用位置和可选参数来实现这一目标?或者我会做两次,一次是针对定位,一次是针对别人的一次?

2 个答案:

答案 0 :(得分:3)

args = ['foo', 'bar']
kwargs = {'c': 2, 'd': 3}
f(*args, **kwargs)

请注意,这也可以。

kwargs = {'a': 'foo', 'b': 'bar', 'c': 2, 'd': 3}
f(**kwargs)

答案 1 :(得分:2)

  

如何通过混合使用位置和可选参数来实现这一目标?

您也可以通过解压缩将值传递给位置参数,就像这样

>>> def func(a, b, c=1, d=2):
...     print(a, b, c, d)
...     
... 
>>> myargs = {"a": 4, "b": 3, "c": 2, "d": 1}
>>> func(**myargs)
4 3 2 1
  

或者我这样做两次,一次是针对定位,一次是针对别人的一次?

是。您也可以解压缩位置参数的值,例如

>>> pos_args = 5, 6
>>> keyword_args = {"c": 7, "d": 8}
>>> func(*pos_args, **keyword_args)
5 6 7 8

或者您可以选择明确传递值,例如

>>> func(9, 10, **keyword_args)
9 10 7 8