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