如何以随机顺序执行几个功能?

问题描述 投票:3回答:3

我定义了四个功能。这些函数返回相同的变量,但具有不同的参数。

这是一个简单的示例:

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()

但是不知道如何使用参数和返回值。

python function random
3个回答
1
投票

您可以使用lambda绑定参数:

import random
param1 = 123
param2 = 456
functions = [lambda : func1(param1), lambda : func2(param2)]
random.shuffle(functions)
results = [ i() for i in functions ]

0
投票

如果我正确理解了这个问题,当您调用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

0
投票

您可以创建一个参数列表,使每个索引与功能列表相关联,或者定义字典,这将更加方便

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)

© www.soinside.com 2019 - 2024. All rights reserved.