Ahh. It seems so obvious now. :) Thanks, Wesley & Kent!
On 7/5/07, wesley chun <[EMAIL PROTECTED]> wrote:
On 7/5/07, Kent Johnson <[EMAIL PROTECTED]> wrote: > wc yeee wrote: > > Hi. Is there a reason the code below raises a syntax error? It's > > probably something silly on my part, but I can't figure it out: > > > > > > >>> b = lambda: print('bar') > > File "<stdin>", line 1 > > b = lambda: print('bar') > > ^ > > SyntaxError: invalid syntax > > The body of a lambda has to be an expression, not a statement. print is > a statement. > > > > > This works fine too: > > > > >>> import sys > > >>> a = lambda: sys.stdout.write('foo\n') > > >>> a() > > foo > > Right, that is an expression and it is the workaround for your original > problem. one thing to keep in mind when thinking, "is this an expression or a statement?" is that the former will always evaluate to some sort of Python object (numerical calculation, function return value [your case above], some string you've built, etc.) whereas the latter will not have any kind of intrisic value (print, while, if, class, def... none of these have a "value"). on a partially-related note, print will be changing to a function in the next generation of Python... see PEP 3105: http://www.python.org/dev/peps/pep-3105/ for a list of some of the other changes coming down the line: http://www.python.org/dev/peps/pep-3100/ cheers, -- wesley - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "Core Python Programming", Prentice Hall, (c)2007,2001 http://corepython.com wesley.j.chun :: wescpy-at-gmail.com python training and technical consulting cyberweb.consulting : silicon valley, ca http://cyberwebconsulting.com
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor