今天在做project的时候遇到一个需求,简单来说是给定一个未知的函数func
和他的参数范围,需要用这些参数重复调用该函数,记录返回值。此时遇到的问题是不知道func
有多少参数和传入参数的顺序,查阅文档后发现可以用参数字典给函数传参,现记录于此。
问题
给定一个函数func
,参数名列表param_names
,参数列表params
,多次调用该函数并记录返回值。
解决方法
def func(a, b, c):
print(a, b, c)
param_names = ['a', 'b', 'c']
params = [
[1,2,3],
[4,5,6],
[7,8,9]
]
res = []
for para in params:
func(**dict(zip(param_names, para)))
# Output:
1, 2, 3
4, 5, 6
7, 8, 9
使用itertools.product快速循环生成参数表
params = itertools.product(*list(params.values()))
这里的params
是一个字典,key是参数名字,value是参数可选范围,比如"param1" :[0, 1, 2]
。itertools.product
可以接受多个list,需要用*list
的形式解包传入参数。