我有一个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,但如何通过混合使用位置和可选参数来实现这一目标?或者我会做两次,一次是针对定位,一次是针对别人的一次?
答案 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