Charlie Taylor wrote:
I find that I use lambda functions mainly for callbacks to things like integration or root finding routines as follows.
flow = integrate(lambda x: 2.0*pi * d(x)* v(x) * sin(a(x)),xBeg, xEnd)
root = findRoot(xBeg, xEnd, lambda x: y2+ lp*(x-x2) -wallFunc( x )[0], tolerance=1.0E-15)
I have tried using named functions instead of using lambda functions, however, I always end up with a convoluted, hard to follow mess.
Is there a better solution than a lambda in the above situations?
Yes. Write a separate function for it. It may actually take less time and be a good deal more readable. Also, you'll be able to call this mess again if you need to. :-)
Well, I think the jury could still be out on which version is more readable, but I don't understand the comment "I have tried using named functions instead of using lambda functions, however, I always end up with a convoluted, hard to follow mess." If you know that:
<name> = lambda *args, **kwds: <expr>
is eqivalent to:
def <name>(*args, **kwds): return <expr>
then it's quite straightforward to translate from one to the other. As an illustration, here are your functions translated from lambdas to defs:
def flowfunc(x): return 2.0*pi * d(x)* v(x) * sin(a(x)) flow = integrate(flowfunc, xBeg, xEnd)
def rootfunc(x): return y2 + lp*(x - x2) - wallFunc(x)[0] root = findRoot(xBeg, xEnd, rootfunc, tolerance=1.0E-15)
I'm not necessarily suggesting that this is the right answer for your situation, just that the translation from lambda to def should be relatively simple if you decide that that's what you want to do.
Steve -- http://mail.python.org/mailman/listinfo/python-list