Как вы передаете аргументы функции в массиве? - PullRequest
1 голос
/ 16 мая 2019

Предположим, у меня есть массив функций, каждая из которых имеет одинаковые аргументы, но каждая манипулирует аргументами по-своему.Затем я хочу перебрать цикл, используя мой массив функций снова и снова, чтобы получить обновленные значения.Как передать аргументы в функции?

def f_1(a, b, c):
    val = a + b + c
    return val

def f_2(a, b, c):
    val = a*b + c
    return val

# something like this?

fun_arr = [f_1, f_2]

val1 = [fun_arr[0](a1, b1, c1), fun_arr[1](a1, b1, c1)]
val2 = [fun_arr[0](a2, b2, c2), fun_arr[1](a2, b2, c2)]

Надеюсь, приведенный выше код psuedo имеет смысл.Это упрощенная версия того, что я пытаюсь сделать.

Если контекст помогает, я пытаюсь написать алгоритм RK2 для системы уравнений, которая может быть повторно использована для общего набора ODE.Думаю, я мог бы достаточно легко написать некоторый простой код, который применим к моей конкретной проблеме, но я хотел бросить вызов самому себе, чтобы сделать мой код многократно используемым.

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Как это:

fun_arr = [f_1, f_2]

args_list = [
    (a1, b1, c1),
    (a2, b2, c2),
]

val1 = [f(*args_list[0]) for f in fun_arr]

all_vals = [
    [f(*args) for f in fun_arr]
    for args in args_list
    ]
1 голос
/ 16 мая 2019
def solver(fun_arr,*vals):
    new_vals = []
    for v in vals:
        for f in fun_arr:
            new_vals.append(f(v))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...