On Mon, 05 Dec 2005 10:38:25 +0100, bruno at modulix <[EMAIL PROTECTED]> wrote:
>Gary Herron wrote: >> Mohammad Jeffry wrote: >> >>> Dear All, >>> >>> Can't a lambda uses the input parameter more then once in the lambda >>> body? >>> eg: >>> lambda x : print x/60,x%60 >>> >>> I tried with def and it works but got syntax error with lambda. Below >>> is an interactive sample: >> >> >> Lambda evaluates a single *expression* and returns the result. As print >> is a statement it does not qualify (and would provide nothing to return >> even if it did). So just use a def. > >or use sys.stdout.write in your lambda: >import sys >lambda x : sys.stdout.write("%d %d\n" % (x/60, x%60)) > >> It is constantly pointed out on >> this list that the lambda provides no extra expressive power, > >They do, when one need a very trivial callable for callbacks - which is >probably the main (if not the only) use case. > >> it is >> merely a shortcut and, as you just found out, a rather restrictive one >> at that. > >Of course. > If you think lambda is restrictive, you can use dumbda: >>> def dumbda(src): ... d = {} ... exec src in d ... for k,v in d.items(): ... if callable(v): return v ... else: ... raise ValueError('dumbda produced no callable from:\n%s'%src) ... >>> f = dumbda("def foo(x): print 'foo(%r)'%x") >>> f('hello foo') foo('hello foo') I'd prefer an "anonymous def" though ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list