В одном проекте наткнулся на такой вот код для вычисления значений функций
func = { "sin": numpy.sin,
"asin": numpy.arcsin,
"cos": numpy.cos,
"acos": numpy.arccos,
"tan": numpy.tan,
"atan": numpy.arctan,
"exp": numpy.exp,
"log": numpy.log }
....
....
if op in func:
arg = evaluateStack( a, b, c )
return func[ op ]( arg )
Используются функции с одним аргументом из пакета NumPy. Потребовалось добавить к этому списку несколько своих функций с тремя аргументами. Описал эти функции, расширил словарь
def my_func(x, y, z):
return ....
func = { "sin": numpy.sin,
"asin": numpy.arcsin,
"cos": numpy.cos,
"acos": numpy.arccos,
"tan": numpy.tan,
"atan": numpy.arctan,
"exp": numpy.exp,
"log": numpy.log,
"myf": my_func }
....
....
if op in func:
if op == "myf":
arg1=...
arg2=...
arg3=...
return func[ op ]( arg1, arg2, arg3 )
arg = evaluateStack( a, b, c )
return func[ op ]( arg )
При выполнении получаю ошибку TypeError: __call__() takes exactly 2 arguments (4 given) на сроке с вызовом своей функции. Раньше с таким подходом не сталкивался и не совсем понимаю в чем ошибка.