Python -список кортежей функций/аргументов

def f1(n): #accepts one argument
    pass

def f2(): #accepts no arguments
    pass

FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments
                 (f1,(6)),
                 (f2,())]

for f, arg in FUNCTION_LIST:
    f(arg)

В третий раз в цикле он пытается передать пустой кортеж аргументов функции, которая не принимает аргументов. Выдает ошибку TypeError: f2() takes no arguments (1 given). Первые два вызова функций работают правильно -передается содержимое кортежа, а не сам кортеж.

Избавление от пустого кортежа аргументов в ошибочной записи списка не решает проблему :

FUNCTION_LIST[2] = (f2,)
for f,arg in FUNCTION_LIST:
    f(arg)

. результаты в ValueError: need more than 1 value to unpack.

Я также пытался перебирать индекс, а не элементы списка.

for n in range(len(FUNCTION_LIST)):
    FUNCTION_LIST[n][0](FUNCTION_LIST[n][1])

Это дает то же самое TypeErrorв первом случае и IndexError: tuple index out of range, когда третьим элементом списка является (f2,).

Наконец, звездочка тоже не работает. На этот раз ошибка при вызовеf1:

for f,args in FUNCTION_LIST:
    f(*args)

дает TypeError: f1() argument after * must be a sequence, not int.

У меня закончились вещи, чтобы попробовать. Я все еще думаю, что первый должен работать. Может кто-то указать мне верное направление?

6
задан Benjamin Hodgson 9 August 2012 в 12:20
поделиться