Форум сайта python.su
В одном проекте наткнулся на такой вот код для вычисления значений функций
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 )
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 )
Офлайн
voltron, всё таки полный код был бы лучше. Во всяком случае у меня такой подход работает.
Офлайн
voltronВ одном классе всё объявлено? Да и полный текст был бы лучше
В одном проекте наткнулся на такой вот код для вычисления значений функцийИспользуются функции с одним аргументом из пакета NumPy. Потребовалось добавить к этому списку несколько своих функций с тремя аргументами. Описал эти функции, расширил словарь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 )При выполнении получаю ошибку TypeError: __call__() takes exactly 2 arguments (4 given) на сроке с вызовом своей функции. Раньше с таким подходом не сталкивался и не совсем понимаю в чем ошибка.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 )
Офлайн
В этом файле классов нет, только функции.
Кажется, нашел и исправил ошибку. В другом файле, который импортируется есть функции с такими же именами, но другим количеством аргументов. Сделал разные имена и все заработало
Офлайн
Это python 3?
Отредактировано (Фев. 5, 2011 21:26:58)
Офлайн