a = b = 1 just syntactic sugar?
Michele Simionato
mis6 at pitt.edu
Sat Jun 7 12:37:07 EDT 2003
Michael Chermside <mcherm at mcherm.com> wrote in message news:<mailman.1054839136.1931.python-list at python.org>...
> Ed Avis writes:
> > It seems a bit perverse that setattr is allowed in lambda expressions
> > but assignment is not; that you can call setdefault to update a
> > dictionary, but not simply set the dictionary's elements; that you can
> > do sys.stdout.write but not print; that you can call a function which
> > asserts but not call assert.
> >
> > If lambda accepted statements as well as expressions - or if a
> > statement could be used as an expression, as in C - then these warts
> > would not arise.
>
> True, but as usual, there's a reason for it. Lambda was intended[1] for
> one purpose and one purpose only... to permit simple anonymous functions
> to be used in places where the succinctness makes it more readable than
> using def to make a named function. Such places are rare except when
> using functional style programming, where they are quite common. But
> in functional style programming you (nearly always) do NOT want
> expressions to have side effects.
>
> So lambda is defined to allow only expressions, and is *intended* for
> simple, side-effect-free functions. While there's nothing *preventing*
> you from calling a function with side effects, the prohibition on
> using statements tends to discourage it. Good style is encouraged,
> but you can violate the rules if you really want to (and know what
> you're doing). If you want more, use def, and give it a name.
>
> [1] This is only my own opinion of how and why Lamda works the way it
> does. In particular, Guido would disagree. He would say that lambda
> was included to satisfy the requests from lisp refugees, and that
> if he had it to do over he wouldn't just choose a better keyword,
> he'd prohibit the whole thing and require def everywhere. On this
> point I respectfully disagree with him... I find lambda to be quite
> nice, but ONLY when used for very small side-effect-free functions.
> And if I had a complaint, it wouldn't be about the (rarely needed
> and easily worked-around) prohibition on assignment statements,
> but about the (frequently needed and impossible to work around) lack
> of a conditional expression.
>
> But-we-won't-bug-Guido-about-the-results-of-that-vote-until-after-2.3 lly,
>
> -- Michael Chermside
+1
I like lambdas as they are, the mistake (see Oscon Python regrets) was
to make 'print' a statement and not an expression. I also agree with you
on the conditional operator which would be especially useful in lambdas.
At this point, however, I am unsure it will ever appear... mah!
Michele
More information about the Python-list
mailing list