Отправьте методы, которые вы хотите запустить, в качестве параметра:
def runmethods(self, variables, methods):
for method in methods:
method(variables)
, затем вызовите что-то вроде:
self.runmethods(variables, (method1, method2))
Это приятно иметь функции в качестве объектов первого классав Python
Для вопроса об OP в комментарии (разные параметры для функций), грязное решение (извините за это):
def rest(a, b):
print a - b
def sum(a, b):
print a + b
def run(adictio):
for method, (a, b) in adictio.iteritems():
method(a, b)
mydictio = {rest:(3, 2), sum:(4, 5)}
run(mydictio)
Вы можете использовать другие контейнеры для отправкиметоды вместе с их переменными, но приятно видеть функцию в качестве ключа словаря
, если ваши методы / функции используют различное количество параметров, вы не можете использовать
for method, (a,b) in adictio.iteritems():
, потому что этоожидает одинаковое количество параметров для всех методов.В этом случае вы можете использовать * args:
def rest(*args):
a, b = args
print a - b
def sum(*args):
a, b, c, d, e = args
print a + b + c + d + e
def run(adictio):
for method, params in adictio.iteritems():
method(*params)
mydictio = {rest:(3, 2), sum:(4, 5, 6, 7, 8)}
run(mydictio)