On Jul 20, 9:22 am, Esmail <ebo...@hotmail.com> wrote: > def funct1(x): > ''' small test function ''' > return x * x > > def funct2(x, y): > ''' small test function ''' > return x + y > > def funct3(x): > ''' small test function ''' > return 1000 + (x*x + x) * math.cos(x) > > def main(): > """ main method """ > print 'in main' > > fn1 = Function(funct1, 'x * x', 1) > fn2 = Function(funct2, 'x + y', 2) > fn3 = Function(funct3, '1000 + (x*x + x) * cos(x)', 1)
If you are defining all of the functions are in-line like this (and I assume you are because you seem to need a function object), I'd just exec the string representation. This is to support the DRY principle. You could do something like this: class Function(object): def __init__(self,args,body): ns = {} exec '''def func(%s): return %s''' in ns self.fn = ns['func'] self.fn_str = body self.num_vars = args.count(',')+1 You have to be REALLY REALLY careful not to pass any user-supplied data to it if this is a server running on your computer, of course. (If it's an application running on the user's computer it doesn't matter.) Still wouldn't be a bad idea to pass it through some kind of validator for extra protection. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list