Как выполнить несколько функций в случайном порядке? - PullRequest
3 голосов
/ 31 октября 2019

Я определил четыре функции. Эти функции возвращают одни и те же переменные, но имеют разные параметры.

Вот простой пример:

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

Но я не знаю, как это сделать с параметрами и возвращает.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Вы можете использовать лямбды для привязки параметров:

import random
param1 = 123
param2 = 456
functions = [lambda : func1(param1), lambda : func2(param2)]
random.shuffle(functions)
results = [ i() for i in functions ]
0 голосов
/ 31 октября 2019

вы могли бы составить список параметров, каждый индекс которых соотносится со списком функций, или определить словарь, который был бы более удобен

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)

...