Так как функции в Python являются объектами, вы можете обработать * args как список методов и передать типы симуляций в качестве произвольных аргументов в конце. Это даст вам возможность определять новые симуляции в будущем без необходимости рефакторинга этого кода.
def func(a, b, c, *args):
for arg in args:
arg(a, b, c)
def foosim(a, b, c):
print 'foosim %d' % (a + b + c)
def barsim(a, b, c):
print 'barsim %d' % (a * b * c)
Использование:
func(2, 2, 3, foosim)
func(2, 2, 3, barsim)
func(2, 2, 3, foosim, barsim)
Выход:
foosim 7
barsim 12
foosim 7
barsim 12