Luonic
@Luonic
Студент, Unity3d, DotNet, Xamarin

Как сохранять список функций с параметрами для последующего поочередного вызова?

У меня есть необходимость создавать список, в котором хранятся функции, в которые уже переданы некоторые параметры
Хочется иметь интерфейс вида:
chain_exec.append(operation_1(param_1 = 15, param_2 = 36))
chain_exec.append(operation(param_1 = 7, param_2 = 35, param_3 = 0))
chain_exec.execute_chain(param = some_object)


chain_exec - это инстанс класса, у которого есть поле для хранения параметра, который я передаю при вызове "execute_chain()". Я хочу, чтобы при вызове этой функции, поочередно выполнянлись функции, которые бы обращались к полю этого класса и что-то с ним делали. Важно, чтобы параметры, которые я передал в функции в методе "append" сохранялись вместе с ними.
Спасибо.
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
@deliro
Вариант №1:
Передавать не просто функцию в список, а кортеж из функции, позиционных и именованых аргументов. Т.е. вместо list.append(func) сделать
list.append((func, (1,2,3), {'a': 'hello', 'b': 'world'}))

Ну и вызывать как-то так:
for f, args, kwargs in list:
    f(*args, **kwargs)


Вариант №2:
Добавить лямбду к каждой функции. Т.е. вместо
chain_exec.append(operation_1(param_1 = 15, param_2 = 36))

написать
chain_exec.append(lambda: operation_1(param_1=15, param_2=36))


Вариант №3:
Использовать partial, но это как стрелять из пушки по комарам в твоём случае, однако, наиболее правильный вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы