Вариант №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, но это как стрелять из пушки по комарам в твоём случае, однако, наиболее правильный вариант.