我定义了四个功能。这些函数返回相同的变量,但具有不同的参数。
这是一个简单的示例:
def func1(studentID, homework1, T1, score):
if len(homework1) > T1:
score[studentID] = 1
else:
score[studentID] = 0
return score
def func2(studentID, homework2, T2, attendance, score):
if len(homework2) > T2 and attendance == 1:
score[studentID] = 1
else:
score[studentID] = 0
return score
现在,我需要以随机顺序执行这些功能,即有时首先执行func1,其次执行func2,但有时执行其他功能。我只知道如何在没有参数的情况下执行此操作,并返回以下内容:
import random
functions = [func1, func2]
random.shuffle(functions)
for i in functions:
i()
但是不知道如何使用参数和返回值。
您可以使用lambda绑定参数:
import random
param1 = 123
param2 = 456
functions = [lambda : func1(param1), lambda : func2(param2)]
random.shuffle(functions)
results = [ i() for i in functions ]
如果我正确理解了这个问题,当您调用func i()
时,您不知道要传递什么等。我该怎么做,创建一个reference字典在列表中带有函数名称和参数,例如
ref_dict = {func1: [param1, param2, param3], func2: [param1, param2]}
并且当您调用函数时,请执行
args = ref_dict[i]
i(*args)
为了保存退货价值,创建一个
return_ref_dict = {func1: None, func2: None}
并且在通话时,
return_val = i(*args)
return_ref_dict[i] = return_val
您可以创建一个参数列表,使每个索引与功能列表相关联,或者定义字典,这将更加方便
import random
# define argument lists
params_list1 = [1, "a", [1,2,3]]
params_list2 = ["b", "a"]
# dictionary answer
dictionary = {'func1':[func1,params_list1], 'func2':[func2,param_list2]}
for f, params in random.shuffle(dictionary.values()):
f(*params)