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