things I wish python could do

Jacek Generowicz jacek.generowicz at cern.ch
Thu May 13 04:07:19 EDT 2004


Ryan Paul <segphault at sbcglobal.net> writes:

> I've spent a lot of time using python, and personally, I feel like it is
> vastly superior when compared to languages like java, and c++, but there
> are still a few things that detract from its elegance and flexibility. I
> thought I might mention a few of them. I'd like to hear what people think
> of my complaints, and I also like to hear the complaints of others.
> 
> 1. many keywords (eg:try/except) are strictly imperative, and cannot be
> used in a functional context.

Yes, I find the whole statement expression dichotomy one huge PITA.

> this really should be possible: map(print,mylist)
> 
> 2. there is no easy way to extend existing classes externally.
> 
> its possible, but it aint pretty...
> 
> class Shape:
>   def __init__(self,numSides, perimeter):
>     pass
> 
> Currently you can do this:
> 
> Shape.__dict__.update({
>   'triangle':ClassMethod(
>     lambda self,sideLength: Shape(3,sideLength*3))
>   
>   'square':ClassMethod(
>     lambda self,sideLength: Shape(4,sideLength*4))
> })

Which looks like (I don't know what ClassMethod is) a long-winded way
of wrting:

  Shape.triangle = lambda self, sideLength: Shape(...))

> I want a way to extend a class as easily as I can define it.

You can. There is one syntax for creating new classes, and another for
mutating existing ones. Ruby conflates the two.

I think that what you "want" is to cleate new classes and mutate
existing ones using the same syntax. Perhaps you should question
whether you really want that.

Maybe there's a satisfactory solution based on the decorators that are
being proposed in PEP 318:

  class Shape [update]:
      def triangle(self, sideLength):
          ...

> 4.  assignments cant be made inside of anonymous functions.

Actually, there's very little you can do in anonymous functions, given
that you are restricted to a _single expression_.

> I was surprised to find that Ruby solves all of my python
> complaints, while achieving grace and simplicity easily comparable
> to that of python, and providing a few innovative extras (including
> real private, public, and protected methods).

Yes, access-restricted private methods were an innovation in the field
of programmer productivity reduction, but it was not an innovation on
Ruby's part ... though why a language which sounds quite sensible,
would choose to embrace such a criminal practice is a mystery to me.

(Hmm ... briefly perusing a Ruby manual, I get the impression that
some of it is a result of having to get around problems caused by all
classes inheriting all (would-be) global functions ... which makes me
reconsider my statement that Ruby sounds quite sensible.)

> Are there are any strong reasons why a language shouldn't support the
> things I list?

1) Keywords are just plain wrong.

4) Python's indentation-based block structure makes general anonymous
   functions a bit problematic. (Briefly perusing the PEPs I notice 308
   ... and I'm surprised that it's publication date is not April 1st,
   as it looks like a PERLification attempt.)

> Is anybody aware of features promised for future python versions
> that solve or nullify my problems?

Read the PEPs.

> Are any of my perceived problems really just products of ignorance?

Probably.

I'm feeling in a controversy-stirring mood. Can you tell?

With any luck I've trodden on Python's, Ruby's and your toes :-)



More information about the Python-list mailing list