【问题标题】:How to execute several functions in random order?如何以随机顺序执行多个功能?
【发布时间】:2020-02-26 12:16:46
【问题描述】:

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

这是一个简单的例子:

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


    【解决方案1】:

    您可以列出每个索引与函数列表相关的参数列表,或者定义更方便的字典

    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)
    
    

    【讨论】:

      【解决方案2】:

      您可以使用 lambdas 来绑定参数:

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

      【讨论】:

      • 谢谢 kutschkem。但是我仍然不明白如何传递参数并获得回报。你能告诉我更多细节吗?
      • @JohnBear 我修好了。我认为将结果收集在一个列表中是合理的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2011-06-17
      • 2023-03-19
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多