UserLinux chooses Python as "interpretive language" of choice

Skip Montanaro skip at pobox.com
Sat Dec 20 23:31:51 EST 2003


    John> On the other hand, claiming that sum() is an adequate replacement
    John> for reduce() is so silly that it borders on the absurd. 

    >> No, operationally that's a correct statement.  People have looked at
    >> the use of reduce() in a number of different contexts.  In all but
    >> the rarest of cases, reduce() was used to sum a list of numbers.
    >> sum() is a perfectly adequate replacement in all but those rare cases
    >> and is easier to read as well.  As Guido mentioned in the talk I
    >> referenced above:
    >> 
    >> reduce()
    >>     nobody uses it,  few understand it
    >>     a for loop is clearer & (usually) faster

    HV> I think no one even tries to understand the very concept of reducing
    HV> sequence to a single object using a rule . Sum is not a replacement
    HV> of this *concept*.  Just what is so wrong with having such a general
    HV> tool available in a programming language ? Doesn't it hurt to
    HV> understand how to use it?

It doesn't hurt to understand the concept of reduce(), but if it's never (or
very rarely) used, it's just extra (nearly dead) code which has to be
maintained.  It's easy enough to write reduce() in Python, and if/when PyPy
is a reality shouldn't be any less efficient than the current C version.

    >> No, it's simply not used very much.  Python never has been a very
    >> strong functional language.  It's always been a very strong
    >> object-oriented language.  Use it the way it's strongest.

    HV> I think Guido should put his money where his mouth is and simply
    HV> eliminate functions as first class objects then !

There are lots of use cases for functions as first class objects which don't
intersect with the usual notions of functional programming.  Here's one
rather silly example:

    l = []
    append = l.append
    for i in range(25):
        append(i)

Another less silly example is os.walk().  It's in some sense a specialized
map() function, so does overlap a bit more with the usual notion of
functional programming.

    HV> If python ever gets very fast, people will reimplement things like
    HV> reduce in their own code or in a functional module.

As well they should.  It's a five-liner in Python.  I've never used it for
anything but summing a list of numbers.  That appears to be true of most
people.

    John> There is no replacement for lambda in sight, even though lambda is
    John> arguably the ***largest single*** one of the functional constructs
    John> that needs work, and has obviously needed work for a long time.

    >> Once again, you desire Python to be something it is not.  If you want
    >> a strong functional language, program in Lisp or Haskell.

    HV> Functions are supposedly first class, regular objects in python. Why
    HV> can't they be sometimes anonymous, just like tuples, lists and user
    HV> defined objects can ? One doesn't even need to consider other
    HV> languages to make this point.

Having functions as first-class objects doesn't mean you have to be able to
define anonymous functions.  Functions as first-class objects worked just
fine before Guido introduced lambda to the language in Python 1.0.

    HV> Does anyone care about consistency in python ? For real, if you
    HV> don't want functional programming, make functions non first class
    HV> and stop claiming that they are objects just like every object.

As I indicated above, "functions as first-class objects" is not synonymous
with "functional programming".  There are plenty of uses for function
objects without considering map(), apply(), lambda(), filter(), reduce() and
friends.

Skip





More information about the Python-list mailing list